逐步解說:偵錯 XSLT 樣式表
此逐步教學中的步驟示範如何使用 XSLT 偵錯工具。 這些步驟包括檢視變數、設定中斷點及逐步執行程式碼。 樣式表會尋找低於書籍價格平均值的所有書籍。
準備此逐步教學
關閉任何開啟的解決方案。
將兩個範例檔案複製到本機電腦。
開始偵錯
若要啟動偵錯
從 [檔案] 功能表中指向 [開啟],再按一下 [檔案]。
找出 belowAvg.xsl 檔案,再按一下 [開啟]。
樣式表會在 XML 編輯器中開啟。
按一下文件屬性視窗中 [輸入] 欄位上的瀏覽按鈕 (...)。
找出 books.xml 檔案,再按一下 [開啟]。
這會設定用於 XSLT 轉換的來源文件檔案。
在 xsl:if 開始標記上按一下滑鼠右鍵,並指向 [中斷點] 後,再按一下 [插入中斷點]。
在 [XML 編輯器] 工具列上,按一下 [偵錯 XSL] 按鈕。
這會啟動偵錯處理,並開啟偵錯工具所使用的幾個新視窗。
顯示輸入文件與樣式表的視窗有兩個。 偵錯工具會使用這些視窗來顯示目前的執行狀態。 偵錯工具定位於樣式表的 xsl:if 項目上,以及 books.xml 檔的第一個書籍節點上。
[本機] 視窗會顯示所有區域變數及其目前的值。 其中包括在樣式表中定義的變數,及偵錯工具用來追蹤目前內容中之節點的變數。
[XSL 輸出] 視窗會顯示 XSL 轉換的輸出。 此視窗與 [Visual Studio 輸出] 視窗是分開的。
監看式視窗
使用 [監看式] 視窗
從 [偵錯] 功能表中,依序指向 [視窗] 及 [監看式] 後,再按一下 [監看式 1]。
這樣可讓 [監看式 1] 視窗可見。
在 [名稱] 欄位中輸入 $bookAverage,再按 ENTER 鍵。
$bookAverage 變數的值會顯示於視窗中。
在 [名稱] 欄位中輸入 self::node(),再按 ENTER 鍵。
self::node() 是一種 XPath 運算式,可評估目前的內容節點。 self::node() XPath 運算式的值為第一個書籍節點。 它會隨著轉換的進行而變更。
展開 self::node() 節點,然後展開 price 節點。
這樣可讓您查看書籍價格的值,而且可以輕鬆將其與 $bookAverage 值進行比較。 因為書籍價格低於平均值,所以 xsl:if 條件應該會成功。
逐步執行程式碼
偵錯工具可讓您逐行執行程式碼。
逐步執行程式碼
按 F5 以繼續。
因為第一個書籍節點滿足 xsl:if 條件,所以會將該書籍節點加入至 [XSL 輸出視窗]。 偵錯工具繼續執行,直到其再次定位於樣式表的 xsl:if 項目上為止。 偵錯工具現在定位於 books.xml 檔的第二個書籍節點上。
在 Watch1 視窗中,self::node() 值會變更為第二個書籍節點。 藉由檢查價格項目的值,您可以確定價格高於平均值,因此 xsl:if 條件應該會失敗。
按 F5 以繼續。
因為第二個書籍節點與 xsl:if 條件不符,所以不會將該書籍節點加入至 [XSL 輸出視窗]。 偵錯工具繼續執行,直到其再次定位於樣式表的 xsl:if 項目上為止。 偵錯工具現在定位於 books.xml 檔的第三個 book 節點上。
在 Watch1 視窗中,self::node() 值會變更為第三個書籍節點。 藉由檢查 price 項目的值,您可以確定價格低於平均值,因此 xsl:if 條件應該會成功。
按 F5 以繼續。
因為已滿足 xsl:if 條件,所以會將第三本書加入至 [XSL 輸出] 視窗。 當處理過 XML 文件中的所有書籍後,偵錯工具會停止。
範例檔案
逐步教學會使用下列兩個檔案。
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>
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>