当前位置:编程学习 > C#/ASP.NET >>

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 < $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 是less than 的意思,同理> 在xml里面是> 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 XslCompile

补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,