我正在尝试获取具有以某个id结尾的属性的标签
比如<span id="ctl00_ContentPlaceHolder1_Country">
我希望得到id以“Country”结尾的跨度
我尝试以下xpath //span[ends-with(@id,'Country')]
,但我得到以下异常
“需要命名空间管理器或XsltContext。此查询具有前缀,变量或用户定义的函数。”
//span[contains(@id,'Country')]
答案 0 :(得分:29)
该功能 ends-with()
未定义为XPath 1.0 ,仅适用于XPath 2.0和XQuery 强>
您正在使用.NET。 。此日期的NET未实现 XPath 2.0,XSLT 2.0或XQuery。
可以轻松构建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表达式相当于XPath 2.0表达式ends-with(/myXml/data, 'World')
:
'World' =
substring(/myXml/data,
string-length(/myXml/data) - string-length('World') +1
)
答案 1 :(得分:8)
contains()和starts-with()在XSLT1中; ends-with()仅在XSLT2中。
答案 2 :(得分:1)
日期: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 :返回第一个参数字符串,第二个参数字符串中出现的字符被第三个参数字符串中相应位置的字符替换。