如何将 XML 文件转换为 HTML






2.93/5 (17投票s)
你有一个XML文档,需要将其转换为更易读的文件格式。
引言
你有一个XML文档,需要将其转换为更易读的文件格式。例如,你有一个存储为XML文档的人员数据,需要将其显示在网页或文本文件中。
解决方案
解决此问题的方案是使用XSLT样式表将XML转换为另一种格式,使用XslTransform
类。在示例代码中,我们将一个虚构企业存储的人员数据从Personnel.xml转换为另一种格式。首先,我们加载用于生成HTML输出的样式表。然后,我们使用PersonnelHTML.xsl样式表通过XSLT执行转换为HTML。之后,我们使用PersonnelCSV.xsl样式表将数据转换为逗号分隔格式。
public static void TransformXML( )
{
// Create a resolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver( );
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// transform the personnel.xml file to HTML
XslTransform transform = new XslTransform( );
// load up the stylesheet
transform.Load(@"..\PersonnelHTML.xsl",resolver);
// perform the transformation
transform.Transform(@"..\Personnel.xml",@"..\Personnel.html",resolver);
// transform the personnel.xml file to comma delimited format
// load up the stylesheet
transform.Load(@"..\PersonnelCSV.xsl",resolver);
// perform the transformation
transform.Transform(@"..\Personnel.xml", @"..\Personnel.csv",resolver);
}
Personnel.xml文件包含以下项目
<?xml version="1.0" encoding="utf-8"?>
<Personnel>
<Employee name="Shahab" title="Customer Service" companyYears="1"/>
<Employee name="Noosha" title="Manager" companyYears="12"/>
<Employee name="NavidChas" title="Salesman" companyYears="3"/>
<Employee name="Mehrdad" title="CEO" companyYears="27"/>
<Personnel>
PersonnelHTML.xsl样式表如下所示
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/">
<html>
<head />
<body title="Personnel">
<xsl:for-each select="Personnel">
<p>
<xsl:for-each select="Employee">
<xsl:if test="position( )=1">
<table border="1">
<thead>
<tr>
<td>Employee Name</td>
<td>Employee Title</td>
<td>Years with Company</td>
</tr>
</thead>
<tbody>
<xsl:for-each select="../Employee">
<tr>
<td>
<xsl:for-each select="@name">
<xsl:value-of select="." />
</xsl:for-each>
</td>
<td>
<xsl:for-each select="@title">
<xsl:value-of select="." />
</xsl:for-each>
</td>
<td>
<xsl:for-each select="@companyYears">
<xsl:value-of select="." />
</xsl:for-each>
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:if>
</xsl:for-each>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
这是HTML源代码
<html xmlns:xs="http://www.w3.org/2002/XMLSchema">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body title="Personnel">
<p>
<table border="1">
<thead>
<tr>
<td>Employee Name</td>
<td>Employee Title</td>
<td>Years with Company</td>
</tr>
</thead>
<tbody>
<tr>
<td>Shahab</td>
<td>Customer Service</td>
<td>1</td>
</tr>
<tr>
<td>Noosha</td>
<td>Manager</td>
<td>12</td>
</tr>
<tr>
<td>Navid</td>
<td>Salesman</td>
<td>3</td>
</tr>
<tr>
<td>Mehrdad</td>
<td>CEO</td>
<td>27</td>
</tr>
</tbody>
</table>
</p>
</body>
</html>
逗号分隔的输出是使用PersonnelCSV.xsl和Personnel.xml生成的;样式表如下所示
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:
xs="http://www.w3.org/2002/XMLSchema">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:for-each select="Personnel">
<xsl:for-each select="Employee">
<xsl:for-each select="@name">
<xsl:value-of select="." />
</xsl:for-each>,<xsl:for-each select="@title">
<xsl:value-of select="." />
</xsl:for-each>,<xsl:for-each select="@companyYears">
<xsl:value-of select="." />
</xsl:for-each>
<xsl:text> 
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
PersonnelCSV.xsl样式表的输出如下所示
Shahab,Customer Service,1
Noosha,Manager,12
Navid,Salesman,3
Mehrdad,CEO,27
历史
- 2005年10月22日:初始发布