Xslt 处理位于两个节点之间的文本
我有一个包含一些文本的XML:Xslt 处理位于两个节点之间的文本,xslt,xpath,Xslt,Xpath,我有一个包含一些文本的XML: <p>Sentence blah blah blah <a_href=... />,<a_href=... />,<a_href=... />.</p> 一句废话,废话,废话 a_href标记将作为上标输出(使用为a_href标记设置上标的CSS),我希望a_href元素之间的逗号也能获得上标。因此,我正在寻找一个具有以下结果的转换: <p>Sentence blah blah blah
<p>Sentence blah blah blah <a_href=... />,<a_href=... />,<a_href=... />.</p>
一句废话,废话,废话
a_href标记将作为上标输出(使用为a_href标记设置上标的CSS),我希望a_href元素之间的逗号也能获得上标。因此,我正在寻找一个具有以下结果的转换:
<p>Sentence blah blah blah <a_href... /><sup>,</sup><a_href... /><sup>,</sup><a_href... />.</p>
一句废话,废话,废话
我认为我不能使用Xpath只选择文本节点的一部分,因此无法找到“一个a_href标记后跟一个逗号和另一个a_href标记”。
我可以检查a_href标记后面是否紧跟着另一个a_href标记,但无法检查它们之间的内容?
只有在a_href节点之间有逗号或逗号和空格时,才会出现上标。如果有更多的文本,它不应该得到上标
(编辑:将标记重命名为a_href以消除歧义,在实际代码中下划线不存在)
上标只有在有逗号或逗号和
a_href节点之间有一个空格
给定格式良好的(!)输入,例如:
XML
<p>Start <a href="abc"/>,<a href="def"/>, middle <a href="ghi"/>, <a href="jkl"/> and end.</p>
开始、中间和结束
以下样式表:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()[normalize-space(.)=',' and preceding-sibling::*[1][self::a] and following-sibling::*[1][self::a]]">
<sup>
<xsl:value-of select="."/>
</sup>
</xsl:template>
</xsl:stylesheet>
将返回:
<?xml version="1.0" encoding="UTF-8"?>
<p>Start <a href="abc"/>
<sup>,</sup>
<a href="def"/>, middle <a href="ghi"/>
<sup>, </sup>
<a href="jkl"/> and end.</p>
开始
,
中间的
,
结束
注意: 你说
a
标签被CSS设置为上标样式;我对CSS了解不多,但我怀疑它也能处理这项任务
上标只有在有逗号或逗号和
a_href节点之间有一个空格
给定格式良好的(!)输入,例如:
XML
<p>Start <a href="abc"/>,<a href="def"/>, middle <a href="ghi"/>, <a href="jkl"/> and end.</p>
开始、中间和结束
以下样式表:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()[normalize-space(.)=',' and preceding-sibling::*[1][self::a] and following-sibling::*[1][self::a]]">
<sup>
<xsl:value-of select="."/>
</sup>
</xsl:template>
</xsl:stylesheet>
将返回:
<?xml version="1.0" encoding="UTF-8"?>
<p>Start <a href="abc"/>
<sup>,</sup>
<a href="def"/>, middle <a href="ghi"/>
<sup>, </sup>
<a href="jkl"/> and end.</p>
开始
,
中间的
,
结束
注意: 你说
a
标签被CSS设置为上标样式;我对CSS了解不多,但我怀疑它也能处理这项任务
上标只有在有逗号或逗号和
a_href节点之间有一个空格
给定格式良好的(!)输入,例如:
XML
<p>Start <a href="abc"/>,<a href="def"/>, middle <a href="ghi"/>, <a href="jkl"/> and end.</p>
开始、中间和结束
以下样式表:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()[normalize-space(.)=',' and preceding-sibling::*[1][self::a] and following-sibling::*[1][self::a]]">
<sup>
<xsl:value-of select="."/>
</sup>
</xsl:template>
</xsl:stylesheet>
将返回:
<?xml version="1.0" encoding="UTF-8"?>
<p>Start <a href="abc"/>
<sup>,</sup>
<a href="def"/>, middle <a href="ghi"/>
<sup>, </sup>
<a href="jkl"/> and end.</p>
开始
,
中间的
,
结束
注意: 你说
a
标签被CSS设置为上标样式;我对CSS了解不多,但我怀疑它也能处理这项任务
上标只有在有逗号或逗号和
a_href节点之间有一个空格
给定格式良好的(!)输入,例如:
XML
<p>Start <a href="abc"/>,<a href="def"/>, middle <a href="ghi"/>, <a href="jkl"/> and end.</p>
开始、中间和结束
以下样式表:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()[normalize-space(.)=',' and preceding-sibling::*[1][self::a] and following-sibling::*[1][self::a]]">
<sup>
<xsl:value-of select="."/>
</sup>
</xsl:template>
</xsl:stylesheet>
将返回:
<?xml version="1.0" encoding="UTF-8"?>
<p>Start <a href="abc"/>
<sup>,</sup>
<a href="def"/>, middle <a href="ghi"/>
<sup>, </sup>
<a href="jkl"/> and end.</p>
开始
,
中间的
,
结束
注意:
你说
a
标签被CSS设置为上标样式;我对CSS了解不多,但我怀疑它也能处理这项任务 你的问题不清楚。是否只希望将分隔两个
节点的逗号标记为
,或将两个节点之间的任何文本标记为
P.S.href
不是标签。编辑问题以澄清“将标签重命名为a_href以消除歧义”没有任何意义。这里没有歧义href
是a
元素的一个属性(任何看过HTML代码的人都知道这一点)。我指的是模糊性,即当你谈论一个a标记时很难理解的东西。恐怕你仍然没有抓住要点:你把href
称为标记。我说href
不是标签,你应该说a
标签,仅此而已更重要的是:你的问题有答案吗?你的问题不清楚。是否只希望将分隔两个
节点的逗号标记为
,或将两个节点之间的任何文本标记为
P.S.href
不是标签。编辑问题以澄清“将标签重命名为a_href以消除歧义”没有任何意义。这里没有歧义href
是a
元素的一个属性(任何看过HTML代码的人都知道这一点)。我指的是模糊性,即当你谈论一个a标记时很难理解的东西。恐怕你仍然没有抓住要点:你把href
称为标记。我说href
不是标签,你应该说a
标签,仅此而已更重要的是:你的问题有答案吗?你的问题不清楚。是否只希望将分隔两个
节点的逗号标记为
,或将两个节点之间的任何文本标记为
P.S.href
不是标签。编辑问题以澄清“将标签重命名为a_href以消除歧义”没有任何意义。这里没有歧义href
是a
元素的一个属性(任何看过HTML代码的人都知道这一点)。我指的是模糊性,即当你谈论一个a标记时很难理解的东西。恐怕你仍然没有抓住要点:你把href
称为标记。我说href
不是标签,你应该说a
标签,仅此而已更重要的是:你的问题有答案吗?你的问题不清楚。您希望仅将分隔两个
节点的逗号标记为
,还是将任何文本标记为