怎么在.net中使用XSLT对xml文档进行转换
创始人
2024-11-29 12:22:20
0次

XSL即可扩展的样式表文件。 可以格式化xml的显示,也可以将xml转换成需要的另一种格式。
1. XSL既然可以格式化xml的显示样式,我们先来看如何在xml中引用xsl文件
如下代码示例:


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


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格式化之后的显示效果如下:

怎么在.net中使用XSLT对xml文档进行转换
1) xsl:template定义匹配节点的转换模板,属性match=”xpath expression”用来定义模板匹配的元素
如下定义匹配根节点的模板

复制代码 代码如下:





2) xsl:for-each循环显示select=”xpath expression”选择节点的转换 (类似编程语言中的foreach语句),
如下示例,选择了pets下面的子元素,并循环显示子元素的几点名字:

复制代码 代码如下:






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

复制代码 代码如下:



its weight is less than 10 km


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

复制代码 代码如下:



 
this is a pig
 


  this is not a pig



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

选择属性weight

6) xsl:attribute 构造xml节点的属性
用来向节点添加属性,例如:



将输出
7) xsl:apply-templates 应用模板
如果xml文件结构比较复杂,可以定义多个template,然后使用标签应用模板,xsl:apply-templates 可以指定属性select=”xpath”来选择应用的模板,或者不指定select表示选择当前节点的模板。
请看下面示例xslt文件pets-templates.xsl
完整的示例xsl文件:pets.xsl

复制代码 代码如下:



      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
   
     
       
        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:

复制代码 代码如下:



      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
   
     
       
        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标签 ;微软帮我们想的太多了。
    Xslt还可以指定参数,定义变量,有关这些方面请查看相关文档。

    相关内容

    热门资讯

    空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
    空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
    格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
    空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
    格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
    品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
    空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
    空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
    中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
    中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...