2011-05-02 103 views
2

如何在XSLT中從父節點2的子節點訪問父節點1的子節點?從XSLT中的節點的子節點訪問另一個節點的子節點

<Test> 
    <SOLUTIONS> 
     <SOLUTION> 
      <OBSERVATIONS> 
       <OBSERVATION Key = "1ASED">A1</OBSERVATION> 
       <OBSERVATION Key = "2DFED">A2</OBSERVATION> 
       <OBSERVATION Key = "3DGEE">A3</OBSERVATION> 
      </OBSERVATIONS> 
      <ITRs> 
       <ITR Key = "ASE1">P1</ITR> 
       <ITR Key = "GGEE1">P2</ITR> 
       <ITR Key = "GERFECE1">P3</ITR> 
      </ITRs> 
     </SOLUTION> 
     <SOLUTION> 
      <OBSERVATIONS> 
       <OBSERVATION Key = "ABCD">A1</OBSERVATION> 
       <OBSERVATION Key = "EFGH">A2</OBSERVATION> 
       <OBSERVATION Key = "IJKL">A3</OBSERVATION> 
      </OBSERVATIONS> 
      ... 
     </SOLUTION> 
    </SOLUTIONS> 
</Test> 

對於每個ITR,我需要打印觀察結果。對於裏面的第一個ITR,我必須把這個鍵連接到觀察鍵上。所以,共顯示9條記錄。

我的XSLT是

<xsl:for-each select="/Test/SOLUTIONS/SOLUTION"> 
    <xsl:for-each select="ITRs/ITR"> 
     <xsl:variable name="Key_ITRPS" select="@Key"/> 
     <xsl:for-each select="/Test/SOLUTIONS/SOLUTION/OBSERVATIONS/OBSERVATION"> 
      <xsl:variable name="srcKey_A" select="@Key"/> 
      <xsl:element name="Relationship"> 
       <xsl:attribute name="RelCommonKey"> 
        <xsl:value-of select="concat($Key_ITRPS,$srcKey_A)"/> 
       </xsl:attribute> 
      </xsl:element> 
     </xsl:for-each> 
    </xsl:for-each> 
</xsl:for-each> 

我需要的輸出是

RelCommonKey 

ASE11ASED 
ASE12DFED 
ASE13DGEE 

GGEE11ASED 
GGEE12DFED 
GGEE13DGEE 

GERFECE11ASED 
GERFECE12DFED 
GERFECE13DGEE 

我面對這裏的問題是隨着上述數據,我是晚上注意到在第二個觀察重點太。

的ITR鍵「ASE1」也鏈接到「ABCD‘EFGH’,‘IJKL’也。請幫我在限制數據上面顯示。

回答

2

您的問題是,你的XPath查詢都是'錨定'在根節點「/ Test」上,你需要做的是使用當前上下文和'父'XPath軸來導航ITR元素到同一個SOLUTION中的OBSERVATIONS。下面的XSLT給出了輸出你需要:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 

    <xsl:template match="/"> 
    <xsl:apply-templates select="//SOLUTION"/> 
    </xsl:template> 

    <xsl:template match="SOLUTION"> 
    <!-- iterat over the ITRs for this solution --> 
    <xsl:for-each select="ITRs/ITR"> 
     <xsl:variable name="Key_ITRPS" select="@Key"/> 
     <!-- iterate over the observations --> 
     <xsl:for-each select="../../OBSERVATIONS/OBSERVATION"> 
     <!-- the ITR Key --> 
     <xsl:value-of select="$Key_ITRPS"/> 
     <!-- the related observation --> 
     <xsl:value-of select="@Key"/> 
     <!-- a newline --> 
     <xsl:text> 
     </xsl:text> 
     </xsl:for-each> 
    </xsl:for-each> 
    </xsl:template> 

</xsl:stylesheet> 
+0

:)謝謝科林·我想我錯過了../../OBSERVATIONS/OBSERVATION感謝您的幫助+1答案:) – Ramm 2011-05-02 06:44:39

+0

沒有問題的話,。這回答你的問題,你應該點擊'剔'符號將它標記爲答案。 – ColinE 2011-05-02 06:46:06

相關問題