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