xml 格式化后转化为html
由于项目的需要,最近学习了XLST和xml向html的转变。
XML文档的终极目标就是做为一个信息的基本类型来存储信息,载被转化为不同的格式来用于各种应用。W3C提出了扩展样式语言规范来实现上述的目的。XSLT(theeXtensibleStylesheetLanguageTransformation)既是用于XML文本的转化和格式化的标准语言。现面用一个简单的例子来说明XML文件是如何格式化后转化为和HTML的。
以下是XML文件的一部分。描述了数据库中的实体:
<?xmlversion="1.0"encoding="utf-8"?
<Entities>
<Entitytitle="公司客户"name="Company"module="Users">
<Itemtitle="名称"name="Name"type="text"/>
<Itemtitle="编号"name="Number"type="text"property="get"/>
<Itemtitle="经理"name="Manage"type="text"/>
<Itemtitle="电话"name="Phone"type="text"/>
<Itemtitle="联系人"name="Linkman"type="text"/>
<Itemtitle="地址"name="Address"type="text"/>
<Itemtitle="传真"name="Fax"type="text"require="false"/>
</Entity>
<Entitytitle="用户"name="User"module="Users">
<Itemtitle="电子邮箱"name="Email"type="text"/>
<Itemtitle="密码"name="Password"type="text"/>
<Itemtitle="消费总额"name="TotalConsumption"type="int"/>
<Itemtitle="真实姓名"name="Name"type="text"require="false"/>
<Itemtitle="公司"name="Company"type="entity"entityname="Company"require="false"/>
</Entity>
<Entitytitle="用户地址"name="UserAddress"module="Users">
<Itemtitle="用户"name="User"type="entity"entityname="User"/>
<Itemtitle="地址"name="Address"type="text"/>
<Itemtitle="电话"name="Phone"type="text"/>
<Itemtitle="是否是默认"name="IsDefault"type="bool"/>
</Entity>
</Entities>
我现在想做的就是将xml文件转化为表格的形式,是实体及属性能过比较直观的表现出来。下面是对应这个XML文件的XLST:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"exclude-result-prefixes="msxsl"
>
<xsl:templatematch="/">
<html>
<body>
<h2align="center">
短途餐饮物流平台实体数据分析<br/>
</h2>
<xsl:apply-templatesselect="Entities/Entity"/>//对Entity节点应用模板
</body>
</html>
</xsl:template>
//Entity节点所对应的模板
<xsl:templatematch="Entity">
<b>
<fontcolor="bisgue">
<xsl:value-ofselect="@title"/>(<xsl:value-ofselect="@name"/>)数据分析:
</font>
<br/>
</b><table width="70%" bordercolor="black" border="1">
<tralign="center"style="background-color:White;">
<thwidth="20%">数据名称</th>
<thwidth="20%">代码</th>
<thwidth="20%">类型</th>
<thwidth="20%">是否可以为空</th>
<th>描述</th>
</tr>
<xsl:for-eachselect="Item">//对节点的批量处理,他与元素xsl:apply-templates是两种不同的方法但输出的结果是想通的。
<tralign="center">
<td>
<xsl:value-ofselect="@title"/>
</td>
<td>
<xsl:value-ofselect="@name"/>
</td>
<td>
<xsl:value-ofselect="@type"/>
</td>
<td>
<xsl:apply-templatesselect="@require"/>
<xsl:iftest="not(@require)">//判断是否存在某个节点,用函数not(欲判断的节点)
否
</xsl:if>
</td>
<td>
<xsl:value-ofselect="(@description)"/>
<xsl:iftest="not(@description)">
null
</xsl:if>
</td>
</tr>
</xsl:for-each>
</table>
<br/>
</xsl:template>
<xsl:templatematch="@require">
是
</xsl:template>
</xsl:stylesheet>
以下是XML文件在应用到xlst后输出的格式
公司客户(Company)数据分析:数据名称代码类型是否可以为空描述名称Nametext否null编号Numbertext否null经理Managetext否null电话Phonetext否null联系人Linkmantext否null地址Addresstext否null传真Faxtext是null
用户(User)数据分析:
数据名称代码类型是否可以为空描述电子邮箱Emailtext否null密码Passwordtext否null消费总额TotalConsumptionint否null真实姓名Nametext是null公司Companyentity是null用户地址(UserAddress)数据分析:
数据名称代码类型是否可以为空描述用户Userentity否null地址Addresstext否null电话Phonetext否null是否是默认IsDefaultbool否null
下面代码将XML文件转化为和HTML文件:
///<summary>
///将xml转化为html
///</summary>
///<paramname="XmlPath">xml文件路径</param>
///<paramname="XslFilePath">xslt文件路径</param>
///<paramname="htmlFilePath">声称的html文件路径</param>
publicstaticvoidXmlTransToHtml(stringxmlPath,stringxslFilePath,stringhtmlFilePath)
{
//生成Html文件路径
stringHtmlFilePath=htmlFilePath;
XPathDocumentmyXPathDoc=newXPathDocument(xmlPath);
XslCompiledTransformmyXslTrans=newXslCompiledTransform();
//加载XSL文件
myXslTrans.Load(xslFilePath);
XmlTextWritermyWriter=newXmlTextWriter(HtmlFilePath,System.Text.Encoding.Default);
myXslTrans.Transform(myXPathDoc,null,myWriter);
myWriter.Close();
}