查詢具有特定文字的所有元素

想象一下以下 XML:

<root>
    <element>hello</element>
    <another>
        hello
    </another>
    <example>Hello, <nested> I am an example </nested>.</example>
</root>

以下 XPath 表示式:

//*[text() = 'hello']

將返回 <element>hello</element> 元素,但不返回 <another> 元素。這是因為 <another> 元素包含 hello 文字週圍的空格。

要檢索 <element><another>,可以使用:

//*[normalize-space(text()) = 'hello']

要麼

//*[normalize-space() = 'hello']

這將在進行比較之前修剪周圍的空白。在這裡我們可以看到 text() 節點說明符在使用 normalize-space 時是可選的。

要查詢包含特定文字的元素,可以使用 contains 函式。以下表示式將返回 <example> 元素:

//example[contains(text(), 'Hello')]

如果要查詢跨越多個子節點/文字節點的文字,則可以使用 . 而不是 text(). 指的是元素及其子元素的整個文字內容。

//example[. = 'Hello,  I am an example .']

要檢視多個文字節點,你可以使用:

//example//text()

將返回:

  • “你好, ”
  • 我就是一個例子
  • “”

為了更清楚地看到元素的整個文字內容,可以使用 string 函式:

string(//example[1])

要不就

string(//example)

你好,我是一個例子。

後者的工作原理是,如果將節點集傳遞給像 string 這樣的函式,XPath 1.0 只會檢視該節點集中的第一個節點(按文件順序),並忽略其餘節點。

所以:

string(/root/*)

會回來:

你好