逐步解說:對 XSLT 樣式表進行偵錯

此逐步教學中的步驟示範如何使用 XSLT 偵錯工具。 這些步驟包括檢視變數、設定中斷點及逐步執行程式碼。 該偵錯工具可讓您一次執行一行程式碼。

若要準備進行本逐步解說,請先將兩個樣本檔案複製到本機電腦。 其中一個是樣式表,另一個是我們將用作樣式表輸入的 XML 檔案。 在本逐步解說中,我們使用的樣式表會尋找成本低於平均書籍價格的所有書籍。

注意

該 XSLT 偵錯工具僅可在 Visual Studio 的 Professional 和 Enterprise 版本中使用。

開始偵錯

  1. [檔案] 功能表中,選擇 [開啟]>[檔案]

  2. 找到 below-average.xsl 檔案並選擇 [開啟]

    該樣式表即會在 XML 編輯器中開啟。

  3. 按一下文件屬性視窗中 [輸入] 欄位上的瀏覽按鈕 (...)。 (如果看不到 [屬性] 視窗,請以滑鼠右鍵按一下編輯器中開啟的檔案上的任意位置,然後選擇 [屬性]。)

  4. 找到 books.xml 檔案,然後選擇 [開啟]

    這會設定用於 XSLT 轉換的來源文件檔案。

  5. below-average.xsl 的第 12 行上設定一個中斷點。 您可以使用下列多種方式中的其中一種來執行此動作:

    • 按一下第 12 行上的編輯器的頁邊距。

    • 按一下第 12 行上的任何位置,然後按 F9

    • 以滑鼠右鍵按一下 xsl:if 開始標記,然後選擇 [中斷點]>[插入中斷點]

      Insert breakpoint in XSL file in Visual Studio

  6. 在功能表列上,選擇 XML>[啟動 XSLT 偵錯] (或按 Alt+F5)。

    偵錯處理程序隨即啟動。

    在編輯器中,該偵錯工具位於樣式表的 xsl:if 元素上。 另一個名為 below-average.xml 的檔案會在編輯器中開啟;這是在處理輸入檔 books.xml 中的每個節點時將填入的輸出檔。

    AutosLocalsWatch 1 視窗會顯示在 Visual Studio 視窗的底部。 Locals 視窗會顯示所有區域變數及其目前的值。 其中包括在樣式表中定義的變數,及偵錯工具用來追蹤目前內容中之節點的變數。

監看視窗

我們會在 Watch 1 視窗中新增兩個變數,以便我們可以在處理輸入檔時檢查它們的值。 (如果您想要監看的變數已在那裡,您也可以使用 Locals 視窗來檢查其值。)

  1. [偵錯] 功能表中,選擇 Windows>Watch>Watch 1

    Watch 1 視窗會變成可見的。

  2. [名稱] 欄位中輸入 $bookAverage,然後按 Enter

    $bookAverage 變數的值會顯示在 [值] 欄位中。

  3. 在下一行中,在 [名稱] 欄位中輸入 self::node(),然後按 Enter

    self::node() 是一種 XPath 運算式,可評估目前的內容節點。 self::node() XPath 運算式的值為第一個書籍節點。 它會隨著轉換的進行而變更。

  4. 展開 self::node() 節點,然後展開其值為 price 的節點。

    Watch window during XSLT debugging in Visual Studio

    您可以看到目前書籍節點的書籍價格值,並將其與 $bookAverage 值進行比較。 因為書籍價格低於平均值,所以當您繼續偵錯處理程序時 xsl:if 條件應該會成功。

逐步執行程式碼

  1. F5 繼續。

    因為第一個書籍節點滿足 xsl:if 條件,所以會將該書籍節點加入 below-average.xml 輸出檔。 偵錯工具繼續執行,直到其再次定位於樣式表的 xsl:if 項目上為止。 偵錯工具現在定位於 books.xml 檔的第二個書籍節點上。

    Watch 1 視窗中,self::node() 值會變更為第二個書籍節點。 藉由檢查價格項目的值,您可以確定價格高於平均值,因此 xsl:if 條件應該會失敗。

  2. F5 繼續。

    因為第二個書籍節點與 xsl:if 條件不符,所以不會將該書籍節點加入 below-average.xml 輸出檔。 偵錯工具繼續執行,直到其再次定位於樣式表的 xsl:if 項目上為止。 偵錯工具現在定位於 books.xml 檔的第三個 book 節點上。

    Watch 1 視窗中,self::node() 值會變更為第三個書籍節點。 藉由檢查 price 元素的值,您可以確定價格低於平均值。 xsl:if 條件應該會成功。

  3. F5 繼續。

    因為已滿足 xsl:if 條件,所以會將第三本書籍加入 below-average.xml 輸出檔。 當處理過 XML 文件中的所有書籍後,偵錯工具會停止。

範例檔案

逐步教學會使用下列兩個檔案。

below-average.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>

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>