Xpath错误,not()和end-with()

我有以下Xpath表达式:

//*[not(input)][ends-with(@*, 'Copyright')]

我希望它能给我所有元素(输入除外),并带有以“版权”结尾的任何属性值。

我在Selenium 2 Java

API中执行它,webDriver.findElements(By.xpath(expression))并得到以下错误:

该表达方式不是合法的表达方式

但是这些表达式可以正常工作:

//*[not(input)][starts-with(@*, 'Copyright')]

//*[ends-with(@*, 'Copyright')]

有任何想法吗?

回答:

我有以下Xpath表达式:

//*[not(input)][ends-with(@*, 'Copyright')]

我希望它能给我所有元素(输入除外),并带有以“版权”结尾的任何属性值。

  1. ends-with()仅是标准的XPath 2.0函数,因此您可能正在使用XPath 1.0引擎,并且由于它不知道称为的函数,因此它会正确引发错误ends-with()

  2. 即使您使用的是XPath 2.0处理器,ends-with(@*, 'Copyright')在一般情况下该表达式也会导致错误,因为该ends-with()函数被定义为最多接受单个字符串(xs:string?)作为其两个操作数-但是@*会产生一个以上字符串的序列在元素具有多个属性的情况下。

  3. //*[not(input)]并不是说“选择所有未命名的元素input。真正的含义是:”选择没有子元素“ input”的所有元素。

  1. 使用此XPath 2.0表达式: //*[not(self::input)][@*[ends-with(.,'Copyright')]]

  2. 对于XPath 1.0,请使用以下表达式:

....

  //*[not(self::input)]

[@*[substring(., string-length() -8) = 'Copyright']]

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

<xsl:strip-space elements="*"/>

<xsl:template match="/*">

<xsl:copy-of select=

"//*[not(self::input)]

[@*[substring(., string-length() -8)

= 'Copyright'

]

]"/>

</xsl:template>

</xsl:stylesheet>

<html>

<input/>

<a x="Copyright not"/>

<a y="This is a Copyright"/>

</html>

<a y="This is a Copyright"/>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:x="http://www.w3.org/1999/xhtml"

>

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

<xsl:strip-space elements="*"/>

<xsl:template match="/*">

<xsl:copy-of select=

"//*[not(self::x:input)]

[@*[substring(., string-length() -8)

= 'Copyright'

]

]"/>

</xsl:template>

</xsl:stylesheet>

<html xmlns="http://www.w3.org/1999/xhtml">

<input z="This is a Copyright"/>

<a x="Copyright not"/>

<a y="This is a Copyright"/>

</html>

<a xmlns="http://www.w3.org/1999/xhtml" y="This is a Copyright"/>

以上是 Xpath错误,not()和end-with() 的全部内容, 来源链接: utcz.com/qa/424989.html

回到顶部