【发布时间】:2014-08-07 18:19:04
【问题描述】:
我有一个 xml 文件,其中的场景是这样的
<heading inline='true'>
HELLO
</heading>
<abc>
<p>WORLD</p>
<p>NEW LINE1</p>
<p>NEW LINE2</p>
<p>NEW LINE3</p>
</abc>
我需要输出
HELLO WORLD$TNEW LINE1$TNEW LINE2$TNEW LINE3
使用 xslt。
规则是,如果 p 标签之前有一个内联属性为 true 的标题标签,则第一个 p 标签需要输出一个空格,其余所有 p 标签都需要输出 $T。
我尝试过的:-
<xsl:template match="p">
<xsl:choose>
<xsl:when test="preceding::heading[@isInline= 'true'] and not(preceding::p)">
<xsl:text> </xsl:text>
<xsl:when>
<xsl:otherwise>
<xsl:text>$T</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates/>
</xsl:template>
但是 p 前面有很多标题标签,我的 sn-p 占了 p 前面的所有标题标签。我想考虑 p 之前的标题标签 just。 标签中也可以有很多级别的嵌套,我不能使用涉及 abc 和兄弟的相对 xpath
我使用的是 xslt 2.0,输出方法是文本
任何输入都会有很大帮助
【问题讨论】:
-
密钥是
<xsl:when test="preceding::*[1][name()='heading'][@inline= 'true']">。请看我的回答。