好的,我知道这已被覆盖了几次,但之前的答案似乎没有给出我正在寻找的结果。可能是xslt没有像我预期的那样线性处理,但如果不是,我不知道如何解决它。
假设我有一个xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<section>A</section>
<divider/>
<divider/>
<section>B</section>
<divider/>
<section>C</section>
<divider/>
<divider/>
<section>D</section>
<divider/>
</root>
如您所见,偶尔会出现重复的元素。使用xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:strip-space elements="*" />
<xsl:template match="/root">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="section">
<xsl:value-of select="text()"/>
</xsl:template>
<xsl:template match="divider">
<xsl:if test="not(preceding-sibling::divider)">
<xsl:text>--</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
我期待看到
A
--
B
--
C
--
D
--
......但这不是正在发生的事情。谁能告诉我我错过了什么?
我现在得到的是:
A
--
B
C
D
答案 0 :(得分:1)
preceding-sibling::divider
选择任何前一个兄弟divider
元素。如果您想检查前一个兄弟不是divider
,请使用not(preceding-sibling::*[1][self::divider])
。