2011-06-18 98 views
3

我已经和我试图将其转换成(表(HTML文件的XML文件 这是我的XML文件:如何转换自定义XML转换成HTML表格

<?xml version="1.0" encoding="UTF-8"?> 
<CONTACTS> 
<CONTACT> 
    <FirstName>AfgZohal</FirstName> 
    <LastName>Zohal Afg</LastName> 
    <EMAILS/> 
</CONTACT> 
<CONTACT> 
    <FirstName>Rangarajkarthik</FirstName> 
    <LastName>karthik Rangaraj</LastName> 
    <EMAILS> 
     <EMail> 
     <Type>gmail</Type> 
     <Value>[email protected]</Value> 
     </EMail> 
     <EMail> 
     <Type>yahoo</Type> 
     <Value>[email protected]</Value> 
     </EMail> 
    </EMAILS> 
</CONTACT> 
<CONTACT> 
    <FirstName>ReganPaul</FirstName> 
    <LastName>Paul Michael Regan</LastName> 
    <URL>http://www.facebook.com/profile.php?id=1660466705</URL> 
    <EMAILS/> 
</CONTACT> 
<CONTACT> 
    <FirstName>keyankarthik</FirstName> 
    <LastName>karthik keyan</LastName> 
    <EMAILS> 
     <EMail> 
     <Type>yahoo</Type> 
     <Value>[email protected]</Value> 
     </EMail> 
    </EMAILS> 
</CONTACT> 
<CONTACT> 
    <FirstName>ColomboGiorgia</FirstName> 
    <LastName>Giorgia Colombo</LastName> 
    <EMAILS> 
     <EMail> 
     <Type>libero</Type> 
     <Value>[email protected]</Value> 
     </EMail> 
    </EMAILS> 
</CONTACT> 
</CONTACTS> 

这是我的XSL文件:

<?xml version="1.0" ?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 

<!--/forward slash is used to denote a patern that matches 
the root node of the XML  document --> 
<xsl:template match ="/" > 
<html> 
    <head> 
    <title> ContactMatrix</title> 
    </head> 
    <body> 
    <xsl:apply-templates /> 
    </body> 
</html> 
</xsl:template> 

<xsl:template match="CONTACTS" > 
<table width="400" border="1" > 
    <tr bgcolor = "#546789" > 
     <td>FirstName</td> 
     <td>LastName</td> 
     <td>Gmail</td> 
     <td>Yahoo</td> 
     <td>Libero</td> 
     <td>URL</td> 
    </tr> 
<xsl:for-each select="CONTACT" > 
    <tr> 
     <td> <xsl:value-of select="FirstName"/> </td> 
     <td> <xsl:value-of select="LastName"/> </td> 

<!-- here we use /@ to access the value of an attribute --> 
     <td> <xsl:value-of select="Type/[email protected]"/> </td> 
     <td> <xsl:value-of select="@yahoo.com"/> </td> 
     <td> <xsl:value-of select="@libero.it"/> </td> 
     <td> <xsl:value-of select="URL"/> </td> 
    </tr> 
</xsl:for-each> 
</table> 
</xsl:template > 
</xsl:stylesheet > 

在我的HTML表中,Gmail,雅虎,自由人=假值 这是在HTML文件中的示例代码为FirstName:Rangarajkarthik

<tr> 
<td>Rangarajkarthik</td><td>karthik Rangaraj</td><td>false</td><td>false</td><td>false</td><td></td> 
</tr> 

请帮助我。

+1

+1你的努力。 –

+0

那么,问题是什么?我没有看到任何。 –

+0

我已更改标题以更好地匹配此问题的内容。如果你关心它,请随时恢复到原来的状态。 –

回答

3

您没有正确选择电子邮件的元素值。例如,通过指令:

<xsl:value-of select="@yahoo.com"/> 

您所要求的选择的CONTACT子节点之间使用的名称@yahoo.com一个节点。您应该使用:

<xsl:value-of select="EMAILS/ 
       EMail[Type='yahoo']/Value"/> 

该指令获取的ValueEMailType是“雅虎”的文字,孩子。 select属性中的代码仅仅是一个使用谓词[..]匹配所需元素的XPath选择。我真的建议看一看W3C教程网站,并花一些时间在其上。

你的xsl:for-each建立表的方法没有错,你接近一个很好的解决方案;但是更多的XSLT方法可以在正确的位置使用xsl:apply-templates

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 

    <xsl:output method="html" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="CONTACTS" > 
     <html> 
      <head> 
       <title>ContactMatrix</title> 
      </head> 
      <body> 
       <table width="400" border="1" > 
        <tr bgcolor = "#546789" > 
         <th>FirstName</th> 
         <th>LastName</th> 
         <th>Gmail</th> 
         <th>Yahoo</th> 
         <th>Libero</th> 
         <th>URL</th> 
        </tr> 
        <xsl:apply-templates select="CONTACT"/> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="CONTACT"> 
     <tr> 
      <td><xsl:value-of select="FirstName"/> </td> 
      <td><xsl:value-of select="LastName"/> </td> 
      <td><xsl:value-of select="EMAILS/ 
        EMail[Type='gmail']/Value"/> 
      </td> 
      <td><xsl:value-of select="EMAILS/ 
        EMail[Type='yahoo']/Value"/> 
      </td> 
      <td><xsl:value-of select="EMAILS/ 
        EMail[Type='libero']/Value"/> 
      </td> 
      <td><xsl:value-of select="URL"/></td> 
     </tr> 
    </xsl:template> 

</xsl:stylesheet> 

当适用于您的输入,产生:

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

     <title>ContactMatrix</title> 
    </head> 
    <body> 
     <table width="400" border="1"> 
     <tr bgcolor="#546789"> 
      <th>FirstName</th> 
      <th>LastName</th> 
      <th>Gmail</th> 
      <th>Yahoo</th> 
      <th>Libero</th> 
      <th>URL</th> 
     </tr> 
     <tr> 
      <td>AfgZohal</td> 
      <td>Zohal Afg</td> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
     </tr> 
     <tr> 
      <td>Rangarajkarthik</td> 
      <td>karthik Rangaraj</td> 
      <td>[email protected]</td> 
      <td>[email protected]</td> 
      <td></td> 
      <td></td> 
     </tr> 
     <tr> 
      <td>ReganPaul</td> 
      <td>Paul Michael Regan</td> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td>http://www.facebook.com/profile.php?id=1660466705</td> 
     </tr> 
     <tr> 
      <td>keyankarthik</td> 
      <td>karthik keyan</td> 
      <td></td> 
      <td>[email protected]</td> 
      <td></td> 
      <td></td> 
     </tr> 
     <tr> 
      <td>ColomboGiorgia</td> 
      <td>Giorgia Colombo</td> 
      <td></td> 
      <td></td> 
      <td>[email protected]</td> 
      <td></td> 
     </tr> 
     </table> 
    </body> 
</html> 
+0

非常感谢您的纠正,这些信息对我来说真的很有用。当然,我会花一些额外的时间来正确地学习。我再次非常感谢你。 – user838691