我有一个包含一些文字的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 <a_href... /><sup>,</sup><a_href... /><sup>,</sup><a_href... />.</p>
我不认为我可以使用Xpath只选择部分文本节点,因此无法找到&#34; a_href标记后跟逗号和另一个a_href标记&#34 ;。 我可以检查一个a_href标签后面跟着另一个a_href标签,但是不能检查它们之间的区别? 只有在a_href节点之间有逗号或逗号和一个空格时才会出现上标。如果有更多的文字,它不应该得到一个上标。
(编辑:将标签重命名为a_href以消除歧义,在实际代码中缺少下划线)
答案 0 :(得分:3)
只有在有逗号或逗号时才会出现上标 a_href节点之间的一个空格。
给出一个格式良好的(!)输入,例如:
<强> XML 强>
<p>Start <a href="abc"/>,<a href="def"/>, middle <a href="ghi"/>, <a href="jkl"/> and end.</p>
以下样式表:
XSLT 1.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知之甚少,但我怀疑它也可以处理这个任务。