共用方式為


比較 (XPath)

若要比較 XPath 中的兩個物件,請使用 = 符號來測試是否相等,或使用 != 測試是否不相等。

若是比較運算,必須確定只提供兩個運算元。 接下來評估每個運算元以進行比較,再視需要予以轉換,讓它們擁有相同的型別。 這個動作會根據下述<比較優先順序>中的處理程序執行。

所有項目和屬性都是字串,但對於數字比較,則會自動轉換成整數值。 在比較運算期間,常值數值會轉換成 long 或 double 型別,如下表所示。

如需有關 < 及其他二進位比較運算子的詳細資訊,請參閱底下的<二進位比較運算子>。

常值型別

比較

範例

String

text(lvalue) op text(rvalue)

a < GGG

Integer

(long) lvalue op (long) rvalue

a < 3

Real

(double) lvalue op (double) rvalue

a < 3.1

可在運算式中將單引號或雙引號當作字串分隔符號。 這會使得從指令碼語言中建構和傳遞模式變得更加容易。

如需如何使用 XPath 執行比較的詳細資訊,請參閱 XML 路徑語言 (XPath) 1.0 版<W3C 建議事項 1999 年 11 月 16 日>(英文) 的第 3.4 節<布林值>,其位於 www.w3.org/TR/xpath。

範例

運算式

代表意義

author[last-name = "Bob"]

至少包含一個 <last-name> 項目 (包含值 Bob) 的所有 <author> 項目。

author[last-name[1] = "Bob"]

其第一個 <last-name> 子項目的所有 <author> 項目的值為 Bob。

author/degree[@from != "Harvard"]

包含 <degree> 項目 (含有不等於 "Harvard" 的 from 屬性) 的所有 <author> 項目。

author[last-name = /editor/last-name]

包含 <last-name> 項目 (該項目與根項目下的 <editor> 項目內部之 <last-name> 項目相同) 的所有 <author> 項目。

author[. = "Matthew Bob"]

其字串值為 Matthew Bob 的所有 <author> 項目。

比較優先順序

與資料型別相關的比較會遵循優先順序。

  • 若至少有一個運算元是布林值,則會先將每一個運算元轉換成布林值。

  • 否則,若至少有一個運算元是數字,則會先將每一個運算元轉換成數字。

  • 否則,若至少有一個運算元是日期,則會先將每一個運算元轉換成日期。

  • 否則,會先將兩個運算元轉換成字串。

二進位比較運算子

一組二進位比較運算子會比較數字並傳回布林值結果。 &lt;、&lt;=、&gt; 和 &gt;= 運算子分別用於小於、小於或等於、大於,以及大於或等於。 可在運算式中將單引號或雙引號當作字串分隔符號。 這會使得在指令碼語言中建構和傳遞模式變得更加容易。

請注意,這些比較運算子僅適用於數字。 您可以比較字串是否相等,但是如果您想要比較字串來決定哪一個會在排序順序中先出現,您必須使用 Microsoft XPath 擴充程式函式

ms256135.collapse_all(zh-tw,VS.120).gif範例

運算式

代表意義

author[last-name = "Bob" and price &gt; 50]

內含 <last-name> 項目 (含值 Bob) 和 <price> 項目 (其值大於 50) 的所有 <author> 項目。

degree[@from != "Harvard"]

包含不等於 "Harvard" 之 from 屬性的所有 <degree> 項目。

book[position() &lt;= 3]

XML 檔中的前三個 <book> 項目 (1、2、3)。

ms256135.collapse_all(zh-tw,VS.120).gif範例

ms256135.collapse_all(zh-tw,VS.120).gifXML 檔 (test.xml)

<?xml version="1.0"?>
<test>

    <x a="1">
      <x a="2" b="B">
        <x>
          <y>y31</y>
          <y>y32</y>
        </x>
      </x>
    </x>

    <x a="2">
      <y>y2</y>
    </x>

    <x a="3">
      <y>y3</y>
    </x>

</test>

ms256135.collapse_all(zh-tw,VS.120).gifXSLT 檔 (test.xsl)

下列 XSLT 樣式表會選取其為文件順序中同層級之第一個項目的所有 <x> 項目。

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>

<!-- Suppress text nodes not covered in subsequent template rule. -->
<xsl:template match="text()"/>

<xsl:template match="*">
   <xsl:element name="{name()}">
      <xsl:apply-templates select="*|@*"/>
      <xsl:if test="text()">
         <xsl:value-of select="."/>
      </xsl:if>
   </xsl:element>
</xsl:template>

<xsl:template match="@*">
   <xsl:attribute name="{name()}">
      <xsl:value-of select="."/>
   </xsl:attribute>
</xsl:template>

<xsl:template match="/test">
  <xsl:apply-templates select="//x[position() = 1 ] "/>
</xsl:template>

</xsl:stylesheet>

ms256135.collapse_all(zh-tw,VS.120).gif格式化輸出

以上的 XML 檔轉換會產生下列結果:

<x a="1">
  <x a="2" b="B">
     <x>
        <y>y31</y>
        <y>y32</y>
     </x>
   </x>
</x>
<x a="2" b="B">
   <x>
      <y>y31</y>
      <y>y32</y>
   </x>
</x>
<x>
   <y>y31</y>
   <y>y32</y>
</x>

請參閱

參考

XPath 範例

概念

XPath 的 XML 檔範例語法 (inventory.xml)