2011-09-23 46 views
0

我需要在rowdata標籤中顯示rowdata的內容時使用formats標籤。需要讀取前一個節點的子值以使用xsl格式化當前節點的值?

的XML是如下: 「temp.xml」

<?xml version="1.0" encoding="iso-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="Temp.xsl"?> 
<ALL_DATA> 
    <TITLES> 
     <VALUE1>Title1</VALUE1> 
     <VALUE2>Title2</VALUE2> 
     <FVALUE1>Title3</FVALUE1> 
    </TITLES> 
    <FORMATS> 
     <VALUE1>I5</VALUE1> 
     <VALUE2>I3</VALUE2> 
     <FVALUE1>F1.1</FVALUE1> 
    </FORMATS> 
    <MY_DATA> 
     <ROWDATA> 
      <VALUE1>5</VALUE1> 
      <VALUE2>33</VALUE2> 
      <FVALUE1>2.11</FVALUE1> 
     </ROWDATA> 
     <ROWDATA> 
      <VALUE1>34</VALUE1> 
      <VALUE2>12</VALUE2> 
      <FVALUE1>239.81</FVALUE1> 
     </ROWDATA> 
    </MY_DATA> 
</ALL_DATA> 

我試圖XSL是: 「temp.xsl」

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
    <xsl:template name="MY_TEMPLATE" match="/"> 
    <html> 
     <body> 
     <table border="1"> 
      <TR border="1"> 
      <xsl:for-each select="/ALL_DATA/TITLES/*"> 
       <th border="1"> 
       <xsl:value-of select="."/> 
       </th> 
      </xsl:for-each> 
      </TR> 
      <xsl:for-each select="/ALL_DATA/MY_DATA/ROWDATA"> 
      <TR> 
       <xsl:for-each select="*"> 
       <TD width ="130"> 
        <xsl:value-of select="."/>:-: 
        <xsl:variable name="cur_node_name" select="name(.)"/> 
        <xsl:for-each select="/ALL_DATA/FORMATS[name(.)]"> 
        <!--<xsl:template match="$cur_node_name"> --> 
        <xsl:value-of select="."/> 
        <!--</xsl:template>--> 
       </xsl:for-each> 
       </TD> 
       </xsl:for-each> 
      </TR> 
      </xsl:for-each> 
     </table> 
     </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

對不起,我要發佈全部內容。 我覺得我可以得到一些幫助。在上面的xml中,我想在顯示Mydata/rowdata/value1時使用formats/value1。 上述Xsl重複標題塊並在<th>中顯示標題。然後第二個for-each塊將遍歷rowdata及其子項。 在顯示子項目時,我需要使用格式標籤來顯示rowdata的子項。

上面的xsl是給用於第三標籤FValue1輸出爲:"2.11:-: I5 I3 F1.1";但我的期望是:"2.11:-: F1.1"。如果我得到這個解決方案,我可以做其餘的。我知道只是通過修改inner for循環,這是可能的。但不能拿到

請幫助,如果任何人有意見怎麼樣。 謝謝。

+0

是否有可能以顯示您預期的輸出,因爲這將有很大的幫助?另外,在您的XSLT中,還有一個FORMATS元素的引用,它不在您的輸入樣本中。謝謝! –

+0

@TimC:是的。 – Flynn1179

+0

我的歉意!我現在看到它... –

回答

0

如果樣本數據是不是簡單化的XSLT可能完全放棄了for-each,看起來像這樣:

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

    <xsl:template match="/"> 
     <html> 
      <body> 
       <table border="1"> 
        <xsl:apply-templates select="TITLES" /> 
        <xsl:apply-templates /> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="TITLES"> 
     <tr> 
      <th><xsl:value-of select="./VALUE1" /></th> 
      <th><xsl:value-of select="./VALUE2" /></th> 
      <th><xsl:value-of select="./FVALUE1" /></th> 
     </tr> 
    </xsl:template> 

    <xsl:template match="ROWDATA"> 
     <tr> 
      <td> 
       <xsl:value-of select="./VALUE1" />:-:<xsl:value-of select="//FORMATS/VALUE1" /> 
      </td> 
      <td> 
       <xsl:value-of select="./VALUE2" />:-:<xsl:value-of select="//FORMATS/VALUE2" /> 
      </td> 
      <td> 
       <xsl:value-of select="./FVALUE1" />:-:<xsl:value-of select="//FORMATS/FVALUE1" /> 
      </td> 
     </tr> 
    </xsl:template> 

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

</xsl:stylesheet> 
相關問題