2012-12-17 43 views

回答

1

的差異可能是最好的一個例子,其中一個元件具有一個或多個子元素,並且多個文本元素示出(一個元件被允許子元素之間散佈的多個文本元素):

<element> 
    text1 
    <child> 
    child1text1 
    <child> 
    text2 
</element> 

假設element是電流:

  • .將返回text1 child1text1 text2(與空白)
  • text()[1]將返回text1
  • text()[2]將返回text2

請特別注意其中text()將表現不同的XSLT 1.0 VS XSLT 2.0

  • text()回報只是text1在xslt 1.0
  • text()返回text1 text2(與空白)在XSLT 2.0
+0

由text()選擇的節點集/序列在xpath 1.0和2.0(它是兩個文本節點的序列)中是相同的,區別在於這個序列被轉換爲字符串。即使在xpath 2.0'element [text()='text1 text2']'也不會匹配這個'element',因爲序列中沒有單個節點具有該字符串值。 –

+0

@Ian感謝您的澄清 - 我可以證實差異的原因是由於結果樹碎片(1)與節點集(2)的字符串序列化的差異? – StuartLC

+1

不是。不同之處在於,在XSLT 1.0中,當您聲明''並且'foo'是一個包含多個節點的節點集時,結果就是第一個節點的字符串值該集合,而在XSLT 2.0中,它是由_all_用空格分隔的節點的字符串值的串聯。 –

2

.爲您提供了當前節點的文本和所有的childNodes

text()給你當前節點只

結論的文字:使用text()如果您想檢查節點中的文本,因爲使用.您將檢查文本所有潛在的childNodes太

2

.是包含單一節點,當前上下文節點(在您的示例span元件節點)的節點集。這樣做的字符串值是其所有後代文本節點的拼接,所以如果你有

<span class="whateverclass">Ann <b>A.</b> Author</span> 

這將是字符串"Ann A. Author"(不帶引號)。

text()是包含上下文節點的所有直接子文本節點(上述示例中的兩個節點"Ann "" Author")的節點集。一個=比較,其中一側是節點組,而另一個是一個字符串爲真,如果節點的任何具有給定的字符串值,因此上述示例<span>元件將匹配任何圖案的

span[@class='whateverclass'][. = 'Ann A. Author'] 
span[@class='whateverclass'][text() = 'Ann '] 
span[@class='whateverclass'][text() = ' Author'] 

但會不是匹配[text() = 'Ann A. Author']

2

您通常不應使用text()。使用「。」彙編字符串值,忽略註釋和處理指令,而text()可以根據註釋出現的位置將文本分成幾塊。當您想要一次處理混合內容時,只能使用文本。