Home  >  Article  >  Backend Development  >  XSLT syntax—detailed explanation of sample code for using XSLT to convert xml documents in .net

XSLT syntax—detailed explanation of sample code for using XSLT to convert xml documents in .net

黄舟
黄舟Original
2017-03-09 16:59:101224browse

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

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

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

如下代码示例:

b230ef24dd954fdb706ec2c46e2fc5fb

312ca3bd34a8d98ade82613162280ecd

只需在xml文件的文档声明后面添加a133dc60e1767cb20e569e165d1647a0即可

2. XSL的格式

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

bcd2660e082fa8ca29a2075787a0b6fa

89458710577b967309bebdd6e6ecbc9e

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”用来定义模板匹配的元素

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


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节点的属性

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



将输出45a0ede37f93ab32bb9541ee0f7c8490e6e38b3c62e8df885fe2e3986461aa63

7) xsl:apply-templates 应用模板

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

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

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




  
    
      
        
        lovely pets
        
      
      
        

lovely pets

  • http://www.php.cn/;/xsl:attribute> http://www.php.cn/;/xsl:attribute> http://www.php.cn/@N00.jpg?1143660418 Courier said: "" weight:

    its weight is less than 10 km

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



  
    
      
        
        lovely pets
        
      
      
        

lovely pets

  • http://www.php.cn/;/xsl:attribute> Courier dog said: "" weight:

    its weight is less than 10 km

  • http://www.php.cn/;/xsl:attribute> Courier pig said: "" weight:

    its weight is less than 10 km

  • http://www.php.cn/@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标签 405171f243c5e895a6efc3a3607aa528;微软帮我们想的太多了。

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


    The above is the detailed content of XSLT syntax—detailed explanation of sample code for using XSLT to convert xml documents in .net. For more information, please follow other related articles on the PHP Chinese website!

    Statement:
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn