程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> XSLT 的調試

XSLT 的調試

編輯:C#入門知識

新建控制台程序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() 方法。

 作者:LoveJenny

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved