博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XSLT语法 在.net中使用XSLT转换xml文档示例
阅读量:5891 次
发布时间:2019-06-19

本文共 5757 字,大约阅读时间需要 19 分钟。

XSL即可扩展的样式表文件。 可以格式化xml的显示,也可以将xml转换成需要的另一种格式。

学习XSL必须熟悉XPath。XSL和XPath一样简单强大,容易学习。

1. XSL既然可以格式化xml的显示样式,我们先来看如何在xml中引用xsl文件

如下代码示例:

<?xml version="1.0" encoding="utf-8"?>

<?xml-stylesheet type="text/xsl" href="url.xsl"?>

只需在xml文件的文档声明后面添加<?xml-stylesheet type=”text/xsl” href=”url.xsl”?>即可

2. XSL的格式

XSL也是一个标准的xml文件,它以xml文档声明开始,根元素必须是xsl:styleshee,同时根元素必须有version属性指定xsl的版本,和xmlns:xsl=” http://www.w3.org/1999/XSL/Transform”指定xsl命名空间,如下示例

<?xml version="1.0" encoding="encoding”?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

3. Xsl要点 如下示例xml

100
this is a blue pig
80
this is a red cat
80
this is a green dog
80
this is a green cat
100
this is a blue dog
80
this is a red dog

上面的xml在通过xsl格式化之后的显示效果如下:

1) xsl:template定义匹配节点的转换模板,属性match=”xpath expression”用来定义模板匹配的元素

如下定义匹配根节点的模板

<xsl:template match=”/”>

</xsl:template>

2) xsl:for-each循环显示select=”xpath expression”选择节点的转换 (类似编程语言中的foreach语句),

如下示例,选择了pets下面的子元素,并循环显示子元素的几点名字:

<xsl:for-each select=”/pets/*”>

<xsl:value-of select=”name()”/>

</xsl:for-each>

3) xsl:if 元素条件显示节点(类似编程语言中的if语句)注意小于号大于号要分别用&lt;和&gt;替代

<xsl:if test=”@weight &lt; 10”>

<i>its weight is less than 10 km</i>

</xsl:if>

4) xsl:choose 多分支条件显示 (类似编程语言中的switch语句)

<xsl:choose >

 <xsl:when test=”name() = ‘pig’”>

<i>this is a pig</i>

 </xsl:when>

<xsl:otherwise>

  <i>this is not a pig</i>

</xsl:otherwise>

</xsl:choose>

5) xsl:value-of 显示选择节点或者属性的值

选择子节点price

<xsl:value-of select=”pets/*/price”/>

选择属性weight

<xsl:value-of select=”pets/*/@weight”/>

6) xsl:attribute 构造xml节点的属性

用来向节点添加属性,例如:

<font>

<xsl:attribute name=”color”><xsl:value-of select=”pets/*/@color”/></xsl:attribute>

</font>

将输出<font color=”red”></font>

7) xsl:apply-templates 应用模板

 如果xml文件结构比较复杂,可以定义多个template,然后使用<xsl:apply-templates>标签应用模板,xsl:apply-templates 可以指定属性select=”xpath”来选择应用的模板,或者不指定select表示选择当前节点的模板。

 请看下面示例xslt文件pets-templates.xsl

完整的示例xsl文件:pets.xsl
lovely pets

lovely pets

  • http://estar-tv.com/images/comprofiler/gallery/dog.gif
    http://www.icosky.com/icon/thumbnails/Animal/Farm/Pig%20Icon.jpg
    http://farm1.static.flickr.com/14/buddyicons/22211409@N00.jpg?1143660418
    Courier
    said: "
    " weight:

    its weight is less than 10 km

完整示例文件 pets-templates.xsl:

lovely pets

lovely pets

  • http://estar-tv.com/images/comprofiler/gallery/dog.gif
    Courier
    dog
    said: "
    " weight:

    its weight is less than 10 km

  • http://www.icosky.com/icon/thumbnails/Animal/Farm/Pig%20Icon.jpg
    Courier
    pig
    said: "
    " weight:

    its weight is less than 10 km

  • http://farm1.static.flickr.com/14/buddyicons/22211409@N00.jpg?1143660418
    Courier
    cat
    said: "
    " weight:

    its weight is less than 10 km

  • 在c#.net中使用XslCompiledTransform转换xml文档,XslTransform也可以使用,但是这个类已经被微软标记为过时,最好不要再用了,如下代码示例:

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Xml;namespace UseXslt{    class Program    {        static void Main(string[] args)        {            //声明XslTransform类实例            System.Xml.Xsl.XslCompiledTransform trans = new System.Xml.Xsl.XslCompiledTransform();            string xsltFile = @"X:\about.net\System.Xml\example\pets.xsl";            using (StreamReader rdr = new StreamReader(xsltFile))            {                using (XmlReader xmlRdr = XmlReader.Create(rdr))                {                    //载入xsl文件                    trans.Load(xmlRdr);                }            }            string inputFile = @"X:\about.net\System.Xml\example\pets.xml";            string outputFile = @"X:\about.net\System.Xml\example\pets-out.htm";            //转化源文件输出到输出文件outputFile            trans.Transform(inputFile, outputFile);        }    }}

    有一点需要注意,使用XslCompiledTransform转换出来的文件,是一个html格式的,这个类会自动在html的head标签中添加一个未关闭的meta标签 <META http-equiv="Content-Type" content="text/html; charset=utf-8">;微软帮我们想的太多了。

    Xslt还可以指定参数,定义变量,有关这些方面请查看相关文档。

    C#处理Xml的相关随笔:

    1.
    2. ,
    3.
    4.
    5.
    6.
    7.

    转载地址:http://wffsx.baihongyu.com/

    你可能感兴趣的文章
    ejabberd
    查看>>
    博客园博客自动生成三级目录(generate three levels content using JS in cnblogs)
    查看>>
    联通高管频频出走:通信业已成鸡肋?
    查看>>
    关于多线程的那些事
    查看>>
    js 将json字符串转换为json对象的方法解析
    查看>>
    1. Two Sum
    查看>>
    让浏览器不再显示 https 页面中的 http 请求警报
    查看>>
    hdu4893Wow! Such Sequence! (线段树)
    查看>>
    Android 最简单的SD卡文件遍历程序
    查看>>
    JavaScript获取DOM元素位置和尺寸大小
    查看>>
    1065: 贝贝的加密工作
    查看>>
    lintcode 单词接龙II
    查看>>
    Material Design学习之 ProgreesBar
    查看>>
    WEB版一次选择多个文件进行批量上传(WebUploader)的解决方案
    查看>>
    Redis之 命令行 操作
    查看>>
    Jvm(46),指令集----对象创建与访问指令
    查看>>
    EL 表达式小结
    查看>>
    内部排序
    查看>>
    jQuery EasyUI API 中文文档 - 组合(Combo)
    查看>>
    10个关于 Dropbox 的另类功用(知乎问答精编)[还是转来了]
    查看>>