zoukankan      html  css  js  c++  java
  • XSLT 的调试

    新建控制台程序CAStudy.在应用程序中,添加books.xml,belowAvg.xsl 代码分别如下:

    books.xml

    <?xml version='1.0'?>

    <!-- This file represents a fragment of a book store inventory database -->

    <bookstore>

      <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">

        <title>The Autobiography of Benjamin Franklin</title>

        <author>

          <first-name>Benjamin</first-name>

          <last-name>Franklin</last-name>

        </author>

        <price>8.99</price>

      </book>

      <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">

        <title>The Confidence Man</title>

        <author>

          <first-name>Herman</first-name>

          <last-name>Melville</last-name>

        </author>

        <price>11.99</price>

      </book>

      <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">

        <title>The Gorgias</title>

        <author>

          <name>Plato</name>

        </author>

        <price>9.99</price>

      </book>

    </bookstore>

    books.xml一看就知道是一个bookstore,里面包含了三个book. 每个book都会有一些attribute和property.例如genre,publicationdate,ISBN 就是attribute.而诸如title,author,price 就是book的property 了。

    belowAvg.xsl:

    <?xml version='1.0'?>

    <xsl:stylesheet version="1.0"

          xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:output method="xml" encoding="utf-8"/>

      <xsl:template match="/">

        <xsl:variable name="bookCount" select="count(/bookstore/book)"/>

        <xsl:variable name="bookTotal" select="sum(/bookstore/book/price)"/>

        <xsl:variable name="bookAverage" select="$bookTotal div $bookCount"/>

        <books>

          <!--Books That Cost Below Average-->

          <xsl:for-each select="/bookstore/book">

            <xsl:if test="price &lt; $bookAverage">

              <xsl:copy-of select="."/>

            </xsl:if>

          </xsl:for-each>

        </books>

      </xsl:template>

    </xsl:stylesheet>

    belowAvg.xsl:名字就代表了,小于平均值的xsl.

    XSLT: 可扩展样式表语言转换Extensible Stylesheet Transformation (XSLT)

    这个belowAvg.xsl 主要就是将book.xml 中小于平均值的那些book找出来,输出成xml

    match=”/”:这样就可以匹配三个book节点了。

    接着声明3个变量,bookCount,bookTotal,在第三个变量中使用$符号来引用前面声明的变量得到平均值。

    接着进行for-each的循环,在循环里面进行if 测试,测试的条件是price < $bookAverage. < xml里面是&lt; lt less than 的意思,同理> xml里面是&gt; gt 就是great than的意思。

    接着进行copy-of 操作,”.” 代表的就是self::node(),也就是book节点。

    image

    调试xslt 有两种方式:

    第一种:使用VS

    打开xsl,可以发现菜单多了XML,点击XML菜单的调试XSLT,然后选择book.xml 就可以进行调试了。

    image

    同样F9设置断点,

    第二种方法:使用代码.

    class XmlXsltDemo

    {

        private const string sourceFile = @"books.xml";

        private const string stylesheet = @"belowAvg.xsl";

        private const string outputFile = @"output.xml";

        public static void Main()

        {

            // Enable XSLT debugging.

            XslCompiledTransform xslt = new XslCompiledTransform(true);

            // Compile the style sheet.

            xslt.Load(stylesheet);

            // Execute the XSLT transform.

            FileStream outputStream = new FileStream(outputFile, FileMode.Append);

            xslt.Transform(sourceFile, null, outputStream);

        }

    }

    在这里由于使用的是相对路径,所以要将books.xml和belowAvg.xsl 属性修改如下:

    image

    还要将XslCompiledTransform xslt = new XslCompiledTransform(true);

    参数传递为true,代表enableDebug.

    就可以看到如下界面了:

    image

     

    使用代码调试的话,不需要设置断点,只要enableDebug为true的话,会自动在xsl中中断。

    本人猜测估计是调用了Debugger.Break() 方法。

  • 相关阅读:
    MySQL InnoDB事务隔离级别脏读、可重复读、幻读
    数据结构与算法-Python/C
    Go语言 转至Nick老师博客
    短信验证功能、邮箱验证功能
    psutil模块
    简单邮件传输协议SMTP
    CSS3主要的几个样式笔记
    cURL的几个经典实例
    Socket进程通信机制
    对PDO的认识
  • 原文地址:https://www.cnblogs.com/LoveJenny/p/2285511.html
Copyright © 2011-2022 走看看