Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XPath:将函数应用于所有匹配项?_Xpath - Fatal编程技术网

XPath:将函数应用于所有匹配项?

XPath:将函数应用于所有匹配项?,xpath,Xpath,所以我有一个XPath表达式来获取我感兴趣的属性值: //ElementName/@AttributeName 我只想要该属性的值作为字符串。我可以这样做: string(//ElementName/@AttributeName) 但这仅将函数应用于第一个节点。我想获得将string()应用到所有匹配项的结果,并将其连接在一起(我使用命令行中的xmllint,它只打印出表达式的结果,因此它不需要是结构化类型的结果)。我想这可能有用: //ElementName/string(./@Attri

所以我有一个XPath表达式来获取我感兴趣的属性值:

//ElementName/@AttributeName
我只想要该属性的值作为字符串。我可以这样做:

string(//ElementName/@AttributeName)
但这仅将函数应用于第一个节点。我想获得将
string()
应用到所有匹配项的结果,并将其连接在一起(我使用命令行中的
xmllint
,它只打印出表达式的结果,因此它不需要是结构化类型的结果)。我想这可能有用:

//ElementName/string(./@AttributeName)
但这给了我一个语法错误,就像我尝试的变体一样。因此,目前,我正在这样做:

count=$(xmllint --xpath 'count(//ElementName/@AttributeName)' file.xml)
for (( i=1; i<=count; ++i )); do
   echo "$(xmllint --xpath "string((//ElementName/@AttributeName)[$i])" file.xml)"
done
count=$(xmllint--xpath'count(//ElementName/@AttributeName)'file.xml)

对于((i=1;i和XPath 2.0(或XQuery 1.0)以及更高版本,您可以使用
//ElementName/@AttributeName/string()
的方法获取所有字符串值的序列或
字符串联接(//ElementName/@AttributeName'))
将它们连接在一起。但是在XPath 1.0中,您始终需要像以前一样转到主机语言。

而且看来,
libxml
,它只是一个CLI接口,仍然只支持XPath 1.0。好的。谢谢!