通过 xpath 从 XML 获取多个属性值
我正在尝试使用一个 xpath 查询检索多个属性值(foo
和 bar
)。
这是我的 XML 内容 (test.xml):
<root>
<level1>
<child foo="bar" bar="foo" />
</level1>
</root>
当前最佳解决方案基于:
- 使用 XPath string() 从 bash 脚本中的 XML 获取属性值
- https://unix.stackexchange.com/ questions/52711/xmllint-display-values-of-more-than-1-attributes-in-single-execution
- ..还有很多谷歌搜索
xmllint test.xml --xpath '//root/level1/child/@*[name()="foo" or name()="bar"]'
xpath -q -e '//root/level1/child/@*[name()="foo" or name()="bar"]' test.xml
..两者都返回:
foo="bar"
bar="foo"
但是我希望有一个类似的输出(属性名称和 ="
已删除):
bar
foo
遗憾的是,用 string()
包装查询并没有 但是
是否真的可以一次获取多个属性值,或者我是否在尝试一些不可能的事情?
我知道我可以通过 cut
或 awk
管道输出, 这在实际环境中是不可能的。
I'm trying to retrieve multiple attribute values (foo
and bar
) with one single xpath query.
This is my XML content (test.xml):
<root>
<level1>
<child foo="bar" bar="foo" />
</level1>
</root>
Current best solution based on:
- Getting attribute value from XML in bash script with XPath string()
- https://unix.stackexchange.com/questions/52711/xmllint-display-values-of-more-than-1-attributes-in-single-execution
- ..and a lot of googling
xmllint test.xml --xpath '//root/level1/child/@*[name()="foo" or name()="bar"]'
xpath -q -e '//root/level1/child/@*[name()="foo" or name()="bar"]' test.xml
..which both return:
foo="bar"
bar="foo"
However I would like to have an output similar this (attribute names and ="
removed):
bar
foo
Wrapping the query with string()
sadly doesn't work.
Is it actually possible to get multiple attribute values at once, or am I trying something impossible?
I'm aware that I could pipe the output through cut
or awk
but that isn't possible in the actual environment.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
找到解决办法了!
有一个名为
concat
的函数 完全实现了我正在寻找的功能:这允许我在一个查询中查询两个属性值(使用
string
)。Found a solution!
There is a function available called
concat
which allows exactly the functionality I was looking for:This allows me to query both attribute values (using
string
) in one query.