2012-07-27 21 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-ofはノードセットが与えられたとき、そのノードセットの最初のノードの文字列値をドキュメントの順序で返します。 (XSLT 2.0は、ノードセット内のすべてのノードの文字列値を返します)。

preceding-sibling :: node()は、ノードの前のすべての兄弟を含むノードセットを返します。

前の兄弟だけが必要な場合は、先行兄弟:: * [1]を使用します。

+0

素早く返信いただきありがとうございます! – Sr7

+0

マイケル、「* [1]」の構文が意味することを教えてください。 – appleLover

+0

:: *は、名前が何であれ要素を選択することを意味し、[1]は、(文書の順序で最後の)軸の順序で最初のものを選択することを意味します。 –

関連する問題