我有一个XML文件,我正在尝试将其转换为(表格(HTML文件)。 这是我的XML文件:
<?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>kart2006@gmail.com</Value>
</EMail>
<EMail>
<Type>yahoo</Type>
<Value>karthikrangaraj@yahoo.com</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>karthycse@yahoo.co.in</Value>
</EMail>
</EMAILS>
</CONTACT>
<CONTACT>
<FirstName>ColomboGiorgia</FirstName>
<LastName>Giorgia Colombo</LastName>
<EMAILS>
<EMail>
<Type>libero</Type>
<Value>giorgiacolombo89@libero.it</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/Value=@gmail.com"/> </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,yahoo,libero = False的值。
这是FirstName:Rangarajkarthik
<tr>
<td>Rangarajkarthik</td><td>karthik Rangaraj</td><td>false</td><td>false</td><td>false</td><td></td>
</tr>
请帮助我。
答案 0 :(得分:3)
您没有正确选择电子邮件的元素值。例如,通过指令:
<xsl:value-of select="@yahoo.com"/>
您要求在@yahoo.com
的子节点中选择名称为CONTACT
的节点。你应该使用:
<xsl:value-of select="EMAILS/
EMail[Type='yahoo']/Value"/>
此指令获取Value
的文字,EMail
的{{1}}为'yahoo'的孩子。 Type
属性中的代码只是一个XPath选择,使用谓词select
来匹配所需元素。我真的建议看一下W3C教程网站,花一些时间。
您构建表格的[..]
方法并没有错,而且您接近一个好的解决方案;但是,更多XSLT方法可以在正确的位置使用xsl:for-each
。
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>