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();

}

相关推荐