我正在学习XSLT 2.0和XPath。在创建示例时,我遇到了XPath中可用的前一轴,并创建了下面的示例。
请找到以下用作输入的order.xml文件。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Order id="12345">
<Item>
<ItemId>007</ItemId>
<ItemName>iPhone 5</ItemName>
<Price>500</Price>
<Quantity>1</Quantity>
</Item>
<Item>
<ItemId>456</ItemId>
<ItemName>Ipad</ItemName>
<Price>600</Price>
<Quantity>2</Quantity>
</Item>
<Item>
<ItemId>7864567</ItemId>
<ItemName>Personal Development Book</ItemName>
<Price>10</Price>
<Quantity>10</Quantity>
</Item>
<Item>
<ItemId>123</ItemId>
<ItemName>Java Book</ItemName>
<Price>20</Price>
<Quantity>12</Quantity>
</Item>
</Order>
请找到以下用于转换上述XML的XSLT testaxis.xsl文件。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="count(/Order/Item[ItemName='Ipad']/ItemName/preceding::*)" />
</xsl:template>
转换后的输出是 的 6
如果我没有错,这里的上下文节点低于一。
<ItemName>Ipad</ItemName>
如果我们计算上下文节点之前的所有节点,则计数到 5 。 现在提出问题,为什么它在输出中显示节点的计数为 6 ?
如果我误解了任何内容,请告诉我
提前致谢。
答案 0 :(得分:1)
您对哪个节点是上下文节点是正确的,并且该节点 有6个前面的元素:
<Item>
元素。<ItemId>
元素。这就是六点。您可以通过执行以下操作来验证这一点:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:for-each select="/Order/Item[ItemName='Ipad']/ItemName/preceding::*">
<xsl:value-of select="concat(name(), '
')" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
前面的元素是下面标有“*”
的元素<*Item>
<*ItemId>007</ItemId>
<*ItemName>iPhone 5</ItemName>
<*Price>500</Price>
<*Quantity>1</Quantity>
</Item>
<Item>
<*ItemId>456</ItemId>
你会看到其中有六个。