检查并打印 xslt 中的节点
check and print nodes in xslt
部分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
我希望能够只打印前两行。或说明 "No Notes" 的消息。但是,我不明白如何精确计算两个或检查是否缺少任何元素。
您可以使用 position()
并且只打印 note
个 position() <=2 :
的元素
<xsl:for-each select="/Notes/Note[position() <= 2]">
<xsl:value-of select=".">
</xsl:value-of>
</xsl:for-each>
结果:
Line 1
Line 2
请注意,<
必须在 select 语句中转义为 <
。
并且您可以使用 xsl:choose
检查 notes
中是否有任何 note
元素,打印 No Notes
以防有 none 并处理xsl:for-each
循环以防出现:
<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
<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"/>
前两个注释将根据默认模板规则打印,这取决于您希望它们的格式。
同样,带有子注释的注释将由内置规则处理。
部分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
我希望能够只打印前两行。或说明 "No Notes" 的消息。但是,我不明白如何精确计算两个或检查是否缺少任何元素。
您可以使用 position()
并且只打印 note
个 position() <=2 :
<xsl:for-each select="/Notes/Note[position() <= 2]">
<xsl:value-of select=".">
</xsl:value-of>
</xsl:for-each>
结果:
Line 1
Line 2
请注意,<
必须在 select 语句中转义为 <
。
并且您可以使用 xsl:choose
检查 notes
中是否有任何 note
元素,打印 No Notes
以防有 none 并处理xsl:for-each
循环以防出现:
<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
<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"/>
前两个注释将根据默认模板规则打印,这取决于您希望它们的格式。
同样,带有子注释的注释将由内置规则处理。