获取xpath函数的问题end-with()工作,而contains()工作正常

Kar*_*rim 18 c# xml xpath

我试图获取具有以某个id结尾的属性的标签.
就像<span id="ctl00_ContentPlaceHolder1_Country">
我想获得id以'Country'结尾的跨度
我尝试以下xpath //span[ends-with(@id,'Country')]但我得到以下异常
"需要命名空间管理器或XsltContext.此查询具有前缀,变量或用户定义的函数."

奇怪的是,包含的工作正常,所以下面的xpath可以//span[contains(@id,'Country')]
解释为什么会发生这种情况?谢谢

Dim*_*hev 31

该函数 未针对XPath 1.0定义,仅针对XPath 2.0XQuery.ends-with()

您正在使用.NET..这个日期的.NET没有实现 XPath 2.0,XSLT 2.0XQuery.

可以很容易地构造一个XPath 1.0表达式,其评估产生与函数相同的结果ends-with():

$str2 = substring($str1, string-length($str1)- string-length($str2) +1)

产生相同的布尔结果(true()false()):

ends-with($str1, $str2)

在您的具体情况下,你只需要替换正确的表达式$str1$str2.他们,因此,/myXml/data'World'.

所以,的XPath 1.0表达式来使用,也就是等同于2.0的XPath表达式ends-with(/myXml/data, 'World'):

'World' = 
   substring(/myXml/data,
             string-length(/myXml/data) - string-length('World') +1
             )
Run Code Online (Sandbox Code Playgroud)


Jim*_*son 8

contains()和starts-with()在XSLT1中; ends-with()仅在XSLT2中.

  • 另外,请注意`fn:contains`不会给你相同的结果.您可以使用:`span [substring(@ id,string-length(@id)-6)='Country']` (5认同)