我對XPath頗爲陌生,所以請耐心等待。我有一個XPath表達式XPath:獲取包含奧巴馬但不包含羅姆尼的文本
'.//*[contains(.,"Obama")]/text()'
這讓我包含「奧巴馬」的文字。但是,我一直無法弄清楚如何將
and [not(contains(., "Romney"))]
添加到表達式而不會出現語法錯誤。它是如何完成的?幫助很多appriciated!
我對XPath頗爲陌生,所以請耐心等待。我有一個XPath表達式XPath:獲取包含奧巴馬但不包含羅姆尼的文本
'.//*[contains(.,"Obama")]/text()'
這讓我包含「奧巴馬」的文字。但是,我一直無法弄清楚如何將
and [not(contains(., "Romney"))]
添加到表達式而不會出現語法錯誤。它是如何完成的?幫助很多appriciated!
使用:
.//*[contains(.,"Obama") and not(contains(.,"Romney"))]/text()
XSLT - 基於驗證:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:copy-of select=
'.//*[contains(.,"Obama") and not(contains(.,"Romney"))]/text()'/>
</xsl:template>
</xsl:stylesheet>
當該變換被應用在下面的XML文檔:
<election>
<choice>Maybe Obama</choice>
<choice>Maybe Romney</choice>
</election>
XPath表達式求值和所選擇的節點被複制到輸出:
Maybe Obama
做筆記:
SomeExpression[x][y]
並不總是等同於:
SomeExpression[x and y]
因此,建議後者 - 不是前者,如在由@ChrisGerken答案指定。
這裏是一個具體的例子:
讓我們有這個XML文檔:
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
這兩個XPath表達式:
/*/*[. mod 3 = 0 and position() = 3]
和
/*/*[. mod 3 = 0][position() = 3]
第一表達式選擇:
<num>03</num>
然而,第二表達式選擇:
<num>09</num>
這裏是一個完整的XSLT - 基於驗證:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select=
"/*/*[. mod 3 = 0 and position() = 3]"/>
================
<xsl:copy-of select=
"/*/*[. mod 3 = 0][position() = 3]"/>
</xsl:template>
</xsl:stylesheet>
當這種轉化是在上面的XML文檔應用中,兩個的XPath表達式,並且這些評價的結果被複制到輸出:
<num>03</num>
================
<num>09</num>
說明:
position()
是一個*上下文相關的函數,當在第k個和第m個謂詞中使用時通常會產生不同的結果,其中k!= m
這是一個真正的IT問題,還是你只是在燃燒美國大選? –
我只是一個法國青蛙,但'羅姆尼'似乎是一個錯誤的表達... –
我建議你選擇不同的字符串來搜索此問題之前關閉。 –