如果我们有以下XML结构:
<Tree>
<Apple>
<Size>6</Size>
</Apple>
<Apple>
<Size>4</Size>
</Apple>
<Apple>
<Size>3</Size>
</Apple>
</Tree>
通过以下方式显示下一个苹果的大小非常容易:
<xsl:for-each select="Tree/Apple">
<xsl:value-of select="following-sibling::*/Size">
</xsl:for-each>
但是,如果你的树结构稍微复杂一些,分支可以容纳一个或多个苹果:
<Tree>
<Branch>
<Apple>
<Size>6</Size>
</Apple>
</Branch>
<Branch>
<Apple>
<Size>4</Size>
</Apple>
<Apple>
<Size>3</Size>
</Apple>
</Branch>
</Tree>
我们如何确保始终选择下一个在线苹果? (6-4-3)
我知道你可以通过检查分支是否有更多苹果子项使用条件,然后从下一个分支中选择(如果不是这种情况)来实现这一点。但只有一个选择线的值才能实现这个目标吗?
非常感谢你的帮助。
答案 0 :(得分:2)
您可以使用following
轴,如果您使用以下内容,它会在文档后面的任何位置查找下一个Apple:
<xsl:for-each select="Tree//Apple">
<xsl:value-of select="following::Apple[1]/Size">
</xsl:for-each>
答案 1 :(得分:1)
一般来说,“迭代不一致结构”的方式是使用xsl:apply-templates和模板规则 - 这就是这些结构的设计目的。
但至于你的苹果例子,它取决于你想要的输出。
答案 2 :(得分:0)
您也可以尝试以下内容:
<xsl:template match="Apple">
<xsl:copy-of select=
"(following-sibling::Apple | ../following-sibling::*/Apple )[1]/Size"/>
</xsl:template>
如果XML变得更加复杂,这可能会更加可靠。 这只会匹配“Apple在同一级别,但可以属于不同的父母。