[英]problem getting xpath function ends-with() to work while contains() works fine
我试图获取具有以某个id结尾的属性的标签。
喜欢<span id="ctl00_ContentPlaceHolder1_Country">
我希望得到id以“Country”结尾的跨度
我尝试以下xpath //span[ends-with(@id,'Country')]
但我得到以下异常
“需要命名空间管理器或XsltContext。此查询具有前缀,变量或用户定义的函数。”
奇怪的是,包含的工作正常,所以下面的xpath工作//span[contains(@id,'Country')]
任何想法为什么会这样? 谢谢
函数 ends-with()
没有为XPath 1.0定义, 但仅适用于XPath 2.0和XQuery 。
您正在使用.NET。 。 这个日期的.NET没有实现 XPath 2.0 , XSLT 2.0或XQuery 。
可以很容易地构造一个XPath 1.0表达式,其评估结果与函数ends-with()
产生相同的结果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表达式,相当于XPath 2.0表达式的ends-with(/myXml/data, 'World')
是 :
'World' =
substring(/myXml/data,
string-length(/myXml/data) - string-length('World') +1
)
contains()和starts-with()在XSLT1中; ends-with()仅在XSLT2中。
日期:2016年1月6日
对于任何阅读此答案的人来说,这些是最新的.Net 4.6框架支持的Xpath字符串函数:
concat :返回参数的串联。
contains :如果第一个参数字符串包含第二个参数字符串,则返回true; 否则返回false。
normalize-space :返回剥离了空格的参数字符串。
starts-with :如果第一个参数字符串以第二个参数字符串开头,则返回true; 否则返回false。
string :将对象转换为字符串。
string-length :返回字符串中的字符数。
substring :返回从第二个参数中指定的位置开始的第一个参数的子字符串以及第三个参数中指定的长度。
substring-after :返回第一个参数字符串中第二个参数字符串第一次出现后的第一个参数字符串的子字符串。
substring-before :返回第一个参数字符串的子字符串,该字符串位于第一个参数字符串中第一个第二个参数字符串出现之前。
translate :返回第一个参数字符串,第二个参数字符串中出现的字符替换为第三个参数字符串中相应位置的字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.