建站经验   /   77

由于项目的需要,最近学习了XLST和xml向html的转变。

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"70%" bordercolor="black" border="1">
      < tr align="center"  style="background-color:White;">
        < th"20%" >数据名称< /th>
        < th"20%">代码< /th>
        < th"20%">类型< /th>
        < th"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后输出的格式

公司客户(Company)数据分析:

数据名称 代码 类型 是否可以为空
描述
名称 Name text null
编号 Number text null
经理 Manage text null
电话 Phone text null
联系人 Linkman text null
地址 Address text null
传真 Fax text null

用户(User)数据分析:

数据名称 代码 类型 是否可以为空
描述
电子邮箱 Email text null
密码 Password text null
消费总额 TotalConsumption int null
真实姓名 Name text null
公司 Company entity null

用户地址(UserAddress)数据分析:

数据名称 代码 类型 是否可以为空
描述
用户 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文件。

网络发现者(aiwei.us)是梁道科技旗下以企业建站,微信开发,视觉设计为主要服务项目的互联网品牌。

我们为企业提供各类互联网平台项目的咨询顾问服务。依靠丰富的互联网实践经验,我们为企业从项目可行性分析,执行策略及方案等方方面面提供合理化建议。