2011-04-27 88 views
0

我有我的XSLT和XML结合在某种情况下一个问题,我坚持不生成HTML,下面是我的问题的例子:XSLT和XML帮助 - 有两种不同的XML元素

XML:

<a> 
<x> 
    <y testname="test1"> 
     <object elementname="Name" elementvalue="true" elementvalue1="ABC" elementvalue2="ADF"> 
     <comparisonresult>false</comparisonresult> 
     </object> 
    </y> 

</x> 
</a> 

XSLT:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <html> 
     <body> 
     <font face="Arial"> 
     <h2>HEADINGY</h2> 
     <h4>Process 1</h4> 
     <h4>More Process</h4> 
      <h4>Additional </h4> 
       <table border="1"> 
       <tr bgcolor="#dccdc"> 
       <th align="center">T1</th> 
       <th align="center">T2</th> 
       <th align="center">T3</th> 
       </tr> 
       </table> 
      <h2>Main</h2> 
      <xsl:for-each select="a/x/y"> 
      <h3> 
       <xsl:value-of select="@testname" /> 
      </h3> 
      <h4>Heading 1</h4> 
      <table border="1" style="display:inline"> 
       <tr bgcolor="#CECEF6"> 
       <th align="center">Item1</th> 
       <th align="center">Item2</th> 
       <th align="center">Item3</th> 
       </tr> 
       <xsl:for-each select="object"> 
       <tr> 
        <td bgcolor="#F2F5A9"> 
        <xsl:value-of select="@elementname" /> 
        </td> 
        <td bgcolor="#F2F5A9"> 
        <xsl:value-of select="@elementvalue1" /> 
        </td> 
        <td bgcolor="#F2F5A9"> 
        <xsl:value-of select="@elementvalue2" /> 
        </td> 

       </tr> 
       </xsl:for-each> 
      </table> 
      </xsl:for-each> 
     </font> 
     </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

如果您输入这两个进http://www.w3schools.com/xml/tryxslt.asp?xmlfile=simple&xsltfile=simple所得到的输出如预期。问题是当我添加了下面的XML,所以它看起来像:

<a> 
<x> 
    <y testname="test1"> 
     <object elementname="Name" elementvalue="true" elementvalue1="ABC" elementvalue2="ADF"> 
     <comparisonresult>false</comparisonresult> 
     </comparisonobject> 
</y> 
<x> 

<t testname="ComparisonResult"> 
    <step stepname="Add x" stepresult="Add x"> 
     <result>true</result> 
    </step> 
</t> 



</a> 

和相应的XSLT:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <html> 
     <body> 
     <font face="Arial"> 
     <h2>HEADINGY</h2> 
     <h4>Process 1</h4> 
     <h4>More Process</h4> 
      <xsl:for-each select="a/x/t"> 
      <xsl:for-each select="testname"> 
      <h4>Additional </h4> 
       <table border="1"> 
       <tr bgcolor="#dccdc"> 
       <th align="center">T1</th> 
       <th align="center">T2</th> 
       <th align="center">T3</th> 
       </tr> 

<xsl:for-each select="stepname"> 
       <tr> 
        <td bgcolor="#F2F5A9"> 
        <xsl:value-of select="@stepname" /> 
        </td> 
        <td bgcolor="#F2F5A9"> 
        <xsl:value-of select="@step result" /> 
        </td> 
        <td bgcolor="#F2F5A9"> 
        <xsl:value-of select="@result" /> 
        </td> 
       </table> 
      <h2>Main</h2> 
      <xsl:for-each select="a/x/y"> 
      <h3> 
       <xsl:value-of select="@testname" /> 
      </h3> 
      <h4>Heading 1</h4> 
      <table border="1" style="display:inline"> 
       <tr bgcolor="#CECEF6"> 
       <th align="center">Item1</th> 
       <th align="center">Item2</th> 
       <th align="center">Item3</th> 
       </tr> 
       <xsl:for-each select="object"> 
       <tr> 
        <td bgcolor="#F2F5A9"> 
        <xsl:value-of select="@elementname" /> 
        </td> 
        <td bgcolor="#F2F5A9"> 
        <xsl:value-of select="@elementvalue1" /> 
        </td> 
        <td bgcolor="#F2F5A9"> 
        <xsl:value-of select="@elementvalue2" /> 
        </td> 

       </tr> 
       </xsl:for-each> 
      </table> 
      </xsl:for-each> 
     </font> 
     </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

我只是得到一个空白页。 我知道这里有很多需要消化的东西,但我真的陷入了困境!

感谢

+0

您的样式表格格式不正确 – 2011-04-27 18:12:39

+0

您的xml格式不正确。让你的x和y标签匹配起来。 – 2011-04-27 18:33:36

+0

我可以看到XML中的错误,但我不确定XSLT会在哪里出错。 – KP65 2011-04-28 09:07:23

回答

0

<xsl:for-each select="a/x/t">不符合您的文档结构 - 它应该是<xsl:for-each select="a/t"> ...但是你的嵌套for-each承担更多的问题。

您试图实现的目标最好使用模板完成。我稍后会添加一个示例。