通过 xpath 从 XML 获取多个属性值
Getting multiple attribute values from XML via xpath
我正在尝试通过一个 xpath 查询检索多个属性值(foo
和 bar
)。
这是我的XML内容(test.xml):
<root>
<level1>
<child foo="bar" bar="foo" />
</level1>
</root>
当前最佳解决方案基于:
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
..return:
foo="bar"
bar="foo"
但是我想要一个类似这样的输出(删除了属性名称和 ="
):
bar
foo
遗憾的是,用 string()
包装查询不起作用。
是否真的可以一次获取多个属性值,还是我在尝试一些不可能的事情?
我知道我可以通过 cut
或 awk
传输输出,但这在实际环境中是不可能的。
找到解决方案!
有一个名为 concat
的函数可用,它完全可以实现我正在寻找的功能:
xpath -q -e 'concat(string(//root/level1/child/@foo), "\n", string(//root/level1/child/@bar))' test.xml
这允许我在一次查询中查询两个属性值(使用 string
)。
我正在尝试通过一个 xpath 查询检索多个属性值(foo
和 bar
)。
这是我的XML内容(test.xml):
<root>
<level1>
<child foo="bar" bar="foo" />
</level1>
</root>
当前最佳解决方案基于:
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
..return:
foo="bar"
bar="foo"
但是我想要一个类似这样的输出(删除了属性名称和 ="
):
bar
foo
遗憾的是,用 string()
包装查询不起作用。
是否真的可以一次获取多个属性值,还是我在尝试一些不可能的事情?
我知道我可以通过 cut
或 awk
传输输出,但这在实际环境中是不可能的。
找到解决方案!
有一个名为 concat
的函数可用,它完全可以实现我正在寻找的功能:
xpath -q -e 'concat(string(//root/level1/child/@foo), "\n", string(//root/level1/child/@bar))' test.xml
这允许我在一次查询中查询两个属性值(使用 string
)。