2012-07-27 53 views
5

我被坚持与前面的兄弟相关的逻辑,xsl - 最后一位兄弟姊妹

试图保持XML简单。

<order> 
<orderList> 
<itemid><id>100</id></itemid> 
<itemid><id>100</id></itemid> 
<itemid><id>111</id></itemid> 
<itemid><id>111</id></itemid> 
<itemid><id>123</id></itemid> 
<itemid><id>324</id></itemid> 
<itemid><id>244</id></itemid> 
<itemid><id>244</id></itemid> 
</orderList> 
</order> 

我想找到使用下面的xsl每个节点的前面的兄弟姐妹。我需要使用每个循环中更大的XSL,以适应这种逻辑...

<html> 
    <body> 
    <table border="1"> 
    <xsl:for-each select="order/orderList/itemid"> 
     <tr> 
     <td>itemid</td> 
     <td><xsl:value-of select="id" /> </td> 
     <td> <xsl:value-of select="preceding-sibling::node()"/> </td> 
     </tr> 
     </xsl:for-each> 
    </table>  
    </body> 
    </html> 
</xsl:template> 

I get these Results 

itemid 100 
itemid 100 100 
itemid 111 100 
itemid 111 100 - expecting 111 
itemid 123 100 - expecting 111 etc 
itemid 324 100 
itemid 244 100 
itemid 244 100 

任何帮助吗?

回答

6

在XSLT 1.0中,当给定节点集时xsl:value - 返回该节点集中第一个节点的字符串值,按照文档顺序。 (XSLT 2.0返回节点集中所有节点的字符串值)。

preceding-sibling :: node()返回一个节点集,其中包含节点的所有前面的兄弟节点。

如果您只想要最后的兄弟姐妹,请使用preceding-sibling :: * [1]。

+0

感谢您的快速回复!,它的工作原理 – Sr7 2012-07-27 02:52:02

+0

michael,请您解释一下“* [1]”的语法是什么意思? – appleLover 2013-11-16 02:35:24

+0

:::表示选择元素,无论其名称如何,[1]表示选择第一个(按轴顺序)(这是​​文档顺序中的最后一个)。 – 2013-11-17 16:35:03