2011-06-18 125 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