我对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问题,还是你只是在燃烧美国大选? –
我只是一个法国青蛙,但'罗姆尼'似乎是一个错误的表达... –
我建议你选择不同的字符串来搜索此问题之前关闭。 –