如何使用 xmllint xpath 获取具有相同标签名称的所有属性

How to get all attributes with same tag name with xmllint xpath

样本xml-

<xml>
<Tag name="attr1"></Tag>
<Tag name="attr2"></Tag>
<Tag name="attr2"></Tag>
</xml>

如何使用 xmllint 获取所有属性的值,就像这样-

attr1
attr2
attr3

我只能使用 xmllint。这个我试过了-

xmllint --xpath 'string(//Tag/@name)'

但这只是 returns 第一次匹配。

使用 string() 只会为您提供 XPath 1.0 中的第一个匹配项。如果您删除 string(),您将获得所有三个属性,但您必须对它们进行 post 处理以仅获取值。我想这将取决于你如何 运行 xmllint(什么 os/shell/etc)。

类似的东西(在 cygwin 中用 bash 测试过)...

attrs=$(xmllint --xpath "//Tag/@name" sample.xml)
echo $attrs | sed 's/\s*name="\([^"]*\)"/\n/g'

另一种选择是首先计算 Tag 元素的数量,然后使用 Tag.

上的位置谓词多次调用 xmllint

类似的东西(在 cygwin 中用 bash 测试过)...

count=$(xmllint --xpath "count(//Tag)" sample.xml)

if [[ $count != 0 ]]; then
    for ((i=1; i<=$count; i++)); do
       echo $(xmllint --xpath "string(//Tag[$i]/@name)" sample.xml)
    done
fi