2011-09-23 48 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> 
相关问题