如何使用 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
样本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
.
类似的东西(在 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