XML文档的终极目标就是做为一个信息的基本类型来存储信息,载被转化为不同的格式来用于各种应用。W3C提出了扩展样式语言规范来实现上述的目的。XSLT(the eXtensible Stylesheet Language Transformation)既是用于XML文本的转化和格式化的标准语言。现面用一个简单的例子来说明XML文件是如何格式化后转化为和HTML的。
以下是XML文件的一部分。描述了数据库中的实体:
<?xml version="1.0" encoding="utf-8" ?
<Entities>
<Entity title="公司客户" name="Company" module="Users">
<Item title="名称" name="Name" type="text"/>
<Item title="编号" name="Number" type="text" property="get"/>
<Item title="经理" name="Manage" type="text"/>
<Item title="电话" name="Phone" type="text"/>
<Item title="联系人" name="Linkman" type="text"/>
<Item title="地址" name="Address" type="text"/>
<Item title="传真" name="Fax" type="text" require="false"/>
</Entity>
<Entity title="用户" name="User" module="Users">
<Item title="电子邮箱" name="Email" type="text"/>
<Item title="密码" name="Password" type="text"/>
<Item title="消费总额" name="TotalConsumption" type="int"/>
<Item title="真实姓名" name="Name" type="text" require="false"/>
<Item title="公司" name="Company" type="entity" entityName="Company" require="false"/>
</Entity>
<Entity title="用户地址" name="UserAddress" module="Users">
<Item title="用户" name="User" type="entity" entityName="User" />
<Item title="地址" name="Address" type="text" />
<Item title="电话" name="Phone" type="text"/>
<Item title="是否是默认" name="IsDefault" type="bool" />
</Entity>
</Entities>
我现在想做的就是将xml文件转化为表格的形式,是实体及属性能过比较直观的表现出来。下面是对应这个XML文件的XLST:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:template match="/">
<html>
<body>
<h2 align="center">
短途餐饮物流平台实体数据分析<br />
</h2>
<xsl:apply-templates select="Entities/Entity"/>//对Entity节点应用模板
</body>
</html>
</xsl:template>
//Entity节点所对应的模板
<xsl:template match="Entity ">
<b>
<font color="bisgue">
<xsl:value-of select="@title"/>(<xsl:value-of select="@name"/>)数据分析:
</font>
<br />
</b>
<table width="70%" bordercolor="black" border="1">
<tr align="center" style="background-color:White;">
<th width="20%" >数据名称</th>
<th width="20%">代码</th>
<th width="20%">类型</th>
<th width="20%">是否可以为空</th>
<th>描述</th>
</tr>
<xsl:for-each select="Item">//对节点的批量处理,他与元素xsl:apply-templates是两种不同的方法但输出的结果是想通的。
<tr align="center">
<td>
<xsl:value-of select="@title"/>
</td>
<td>
<xsl:value-of select="@name"/>
</td>
<td>
<xsl:value-of select="@type"/>
</td>
<td>
<xsl:apply-templates select="@require"/>
<xsl:if test="not(@require)">//判断是否存在某个节点,用函数not(欲判断的节点)
否
</xsl:if>
</td>
<td>
<xsl:value-of select="(@description)"/>
<xsl:if test="not(@description)">
null
</xsl:if>
</td>
</tr>
</xsl:for-each>
</table>
<br />
</xsl:template>
<xsl:template match="@require">
是
</xsl:template>
</xsl:stylesheet>
以下是XML文件在应用到xlst后输出的格式
数据名称 | 代码 | 类型 | 是否可以为空 | 描述 |
---|---|---|---|---|
名称 | Name | text | 否 | null |
编号 | Number | text | 否 | null |
经理 | Manage | text | 否 | null |
电话 | Phone | text | 否 | null |
联系人 | Linkman | text | 否 | null |
地址 | Address | text | 否 | null |
传真 | Fax | text | 是 | null |
用户(User)数据分析:
数据名称 | 代码 | 类型 | 是否可以为空 | 描述 |
---|---|---|---|---|
电子邮箱 | text | 否 | null | |
密码 | Password | text | 否 | null |
消费总额 | TotalConsumption | int | 否 | null |
真实姓名 | Name | text | 是 | null |
公司 | Company | entity | 是 | null |
数据名称 | 代码 | 类型 | 是否可以为空 | 描述 |
---|---|---|---|---|
用户 | User | entity | 否 | null |
地址 | Address | text | 否 | null |
电话 | Phone | text | 否 | null |
是否是默认 | IsDefault | bool | 否 | null |
下面代码将XML文件转化为和HTML文件:
/// <summary>
///将xml转化为html
/// </summary>
/// <param name="XmlPath">xml文件路径</param>
/// <param name="XslFilePath">xslt文件路径</param>
/// <param name="htmlFilePath">声称的html文件路径</param>
public static void XmlTransToHtml(string xmlPath, string xslFilePath, string htmlFilePath)
{
//生成Html文件路径
string HtmlFilePath = htmlFilePath;
XPathDocument myXPathDoc = new XPathDocument(xmlPath);
XslCompiledTransform myXslTrans = new XslCompiledTransform();
//加载XSL文件
myXslTrans.Load(xslFilePath);
XmlTextWriter myWriter = new XmlTextWriter(HtmlFilePath, System.Text.Encoding.Default);
myXslTrans.Transform(myXPathDoc, null, myWriter);
myWriter.Close();
}
在测试类中调用这个方法,运行测试就会得到我们需要的html文件。(编译环境 vs.net 2008)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述