zoukankan      html  css  js  c++  java
  • XPath和XSL转换向XML应用XSL转换

    如何将 XSL 转换应用于 XML

    此示例阐释如何使用 XslTransform 类将可扩展样式表语言转换 (XSLT) 文件应用于 XML 文档。该类实现 WWW 联合会 (W3C) 的 W3C XSL 转换 (XSLT) 1.0 版规范。(有关更一步的参考信息,您可以参阅 W3C 的 W3C 可扩展样式表语言 (XSL) 1.0 版规范。)

     
    VB TransformXML.aspx

    [运行示例] | [查看源代码]

    XSLT 是一种基于 XML 的语言,用于将一个 XML 文档转换为另一个 XML 文档,或将一个 XML 文档转换为其他的结构化文档。XSLT 使用 XML 路径语言 (XPath) 在 XML 文档上执行查询,以指定该文档的特定部分。(有关如何使用 XPath 查询 XML 文档的示例,请参阅如何使用 XPath 表达式查询 XML 文档。)

    XML 文档的结构常常与处理 XML 数据所需的结构不匹配。要将现有结构转换为可处理的结构,您需要使用 XSLT 处理器和定义如何进行转换的 XSLT 样式表(或 XSLT 文件)。XSLT 文件由一些模板组成,这些模板指定源 XML 文档中的每个节点应以何种方式出现在目标 XML 文档中。因此,XSLT 处理器有三种树:

    1. 一种是源 XML 树
    2. 一种是目标结构树
    3. 一种是 XSLT 文件树

      下列关系图说明了转换过程:接收 XML 文档,将 XSLT 文件应用于该 XML 文档的节点,然后生成另一个所需格式的文档。

      此示例由两个函数组成。第一个函数只读取 XML 文档,然后使用 XSLT 文件转换数据。第二个函数读取 XML 文档,转换数据,然后用转换后的数据编写一个新的 XML 文档。

      该示例将这两个函数应用于三组文档:

      1. 第一组文档是 XML 文档 books.xml 和 XSLT 文件 books.xsl。XSLT 文件由一些模板组成,它们获取书店元素中的所有书籍,然后为每个书籍元素获取 ISBN 属性和价格元素的值。还有一个模板,它指示 XSLT 处理器从根(“/”)节点开始处理。
      2. 第二组文档是 XML 文档 ProcessParametersA.xml 和 XSLT 文件 StyleSheetGenerator.xsl。在这种情况下,该示例读取 XML 文档以得出要使用包含在 XSLT 文件中的两个样式表中的哪一个。然后,该示例生成指定的样式表。
      3. 第三组文档是 XML 文档 ProcessParametersB.xml 和 XSLT 文件 StyleSheetGenerator.xsl。该示例处理这些文档的方式与处理第二组文档的方式相同。然而,在这种情况下,该示例生成不同的样式表。

      下列代码显示两个函数中的第一个。该函数只读取并转换数据。为此,该函数首先创建一个 XPathDocument 对象和一个 XslTransform 对象。然后,使用 Load 方法将 XSLT 文件加载到 XslTransform 对象中。为启动转换,该函数调用传递到 XPathDocument 中的 Transform 方法。转换过程返回一个 XmlReader,用于读取转换后的数据。

      注意:如在如何使用 XPath 表达式查询 XML中阐述的那样,XPathDocument 类可为使用 XSLT 处理 XML 文档提供快速、高性能的缓存。

      // args[0] is the xml file and args[1] is the stylesheet file.
                      public void ReadTransform(String[] args)
                      {
                      try
                      {
                      XPathDocument myXPathDocument = new XPathDocument (args[0]);
                      XslTransform myXslTransform = new XslTransform();
                      myXslTransform.Load(args[1]);
                      XmlReader reader = myXslTransform.Transform(myXPathDocument, null);
                      FormatXml(reader);
                      }
                      catch (Exception e)
                      {
                      Console.WriteLine ("Exception: {0}", e.ToString());
                      }
                      }
                      
      C# VB  

      除了从转换中返回 XmlReader 外,还可能将 XmlWriter 提供给 Transform 方法。提供一个编写器可使转换后的数据写入文件或流中。在此示例中,两个函数中的第二个显示如何将 XmlWriter 包括在转换过程中。下列代码显示第二个函数如何将转换后的数据写入名为 transform.xml 的文件,然后将此文件输出到控制台。

      // args[0] is the xml file and args[1] is the stylesheet file.
                      public void ReadTransformWrite(String[] args)
                      {
                      StreamReader stream = null;
                      try
                      {
                      XPathDocument myXPathDocument = new XPathDocument (args[0]);
                      XslTransform myXslTransform = new XslTransform();
                      XmlTextWriter writer = new XmlTextWriter("transform.xml", null);
                      myXslTransform.Load(args[1]);
                      myXslTransform.Transform(myXPathDocument, null, writer);
                      writer.Close();
                      stream = new StreamReader ("transform.xml");
                      Console.Write(stream.ReadToEnd());
                      }
                      catch (Exception e)
                      {
                      Console.WriteLine ("Exception: {0}", e.ToString());
                      }
                      finally
                      {
                      if (stream != null)
                      stream.Close();
                      }
                      }
                      
      C# VB  

      虽然没有在此示例中显示出来,但您可以使用 XslTransform 的 Transform 方法加载文档并直接写入文件。这是一个从文件加载 XML 文档、应用 XSLT 文件并将输出写到文件的简便方法。这样可以使用户不必创建并加载输入源文档,然后写入文件流。该方法使用 XPathDocument 转换 XML,如下列代码所示。

      XslTransform xsltransform = new XslTransform();
                      xsltransform.Load("favorite.xsl");
                      xsltransform.Transform("MyDocument.xml", "TransformResult.xml");
                      
      C# VB  

      摘要

      1. XSLT 是一种使用 XPath 作为查询语言,将 XML 文档转换成其他 XML 文档的语言。
      2. 使用 XslTransform 类的 Load 方法可以加载 XSLT 样式表(或 XSLT 文件)。
      3. XslTransform 类的 Transform 方法使用 XPathDocument,并且返回一个 XmlReader,或者将转换写入所提供的 XmlWriter 或流。
      4. XslTransform 类可转换任何实现 XPathNavigator 和 IXPathNavigable 接口的数据。
      5. 您可以组合 XSLT 文件以生成所需的结构输出格式(如 XML 或 HTML)。
      6. XSLT 处理器不操作文档。它们操作文档结构。
  • 相关阅读:
    shell lab
    cache lab
    后缀树
    leetcode maximum-length-of-repeated-subarray/submissions
    leetcode assign-cookies
    lcs
    leetcode delete-operation-for-two-strings
    【C】C语言typedef
    【C】C语言结构体指针的语法
    【JAVA】Java 命令行参数解析
  • 原文地址:https://www.cnblogs.com/chorrysky/p/584504.html
Copyright © 2011-2022 走看看