2012-07-27 3 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()는 노드의 모든 형제를 포함하는 노드 집합을 반환합니다.

마지막 형제 자매 만 원하면 preceding-sibling :: * [1]을 사용하십시오.

+0

답장을 보내 주셔서 감사합니다. – Sr7

+0

마이클, "* [1]"구문의 의미를 설명해주십시오. – appleLover

+0

:: *는 이름이 무엇이든 요소를 ​​선택하는 것을 의미하고, [1]은 첫 번째 (축 순서대로) (문서 순서의 마지막 부분)를 선택한다는 의미입니다. –