部分XML
<Notes>
<Note>Line 1</Note>
<Note>Line 2</Note>
<Note>Line 2</Note>
</Notes>
部分XSLT
<xsl:for-each select="/Notes/Note">
<xsl:value-of select=".">
</xsl:value-of>
</xsl:for-each>
输出:
Line 1
Line 2
Line 3
我希望能够只打印前两行。或者是一条消息,说明&#34;没有备注&#34;。但是,我不明白如何计算两个或检查缺少任何元素。
答案 0 :(得分:0)
您可以使用position()
并仅使用位置()&lt; = 2打印note
元素:
<xsl:for-each select="/Notes/Note[position() <= 2]">
<xsl:value-of select=".">
</xsl:value-of>
</xsl:for-each>
结果:
Line 1
Line 2
请注意,<
必须在select语句中以<
进行转义。
您可以使用note
检查notes
内是否有xsl:choose
个元素,如果没有,则打印No Notes
并处理xsl:for-each
looop万一有:
<xsl:choose>
<xsl:when test="/Notes/Note">
<xsl:for-each select="/Notes/Note[position() <= 2]">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>No Notes</xsl:otherwise>
</xsl:choose>
供参考:https://developer.mozilla.org/en-US/docs/Web/XPath/Functions/position
答案 1 :(得分:0)
<xsl:template match="Notes[not(*)]">
<xsl:text>No Notes</xsl:text>
</xsl:template>
<!-- ignore everything after the second note -->
<xsl:template match="Note[2]/following-sibling::Note"/>
前两个音符将按默认模板规则打印,具体取决于您希望它们的格式化方式。
同样,带有子Notes的Notes将由内置规则处理。