![](/img/trans.png)
[英]Get attribute value from xml tags with shell script and convert to csv
[英]Shell scripting get value of XML tags
我有下面的 XML 数据。
<java:Parameter>
<java:Name>flagCount</java:Name>
<java:Value>Y</java:Value>
</java:Parameter>
<java:Parameter>
<java:Name>returnCode</java:Name>
<java:Value>001</java:Value>
</java:Parameter>
我只想获得名称“returnCode”的值(值为 001)。
我尝试通过下面的命令来做,但不起作用。
echo -e 'cat //java:Value/text()' | xmllint --shell test_check_main.xml
XPath error : Undefined namespace prefix
xmlXPathEval: evaluation failed
//java:Value/text(): no such node
如何通过shell脚本实现?
首先修复xml:
xml=$( cat <<'EOF'
<java:Parameter>
<java:Name>flagCount</java:Name>
<java:Value>Y</java:Value>
</java:Parameter>
<java:Parameter>
<java:Name>returnCode</java:Name>
<java:Value>001</java:Value>
</java:Parameter>
EOF
)
xml2="<java:root xmlns:java=\"http://fakens.com\">""$xml""</java:root>"
然后你可以用这个 xpath 语句得到它:
echo "$xml2" | xmllint --xpath '//*[local-name()="Parameter"]/*[local-name()="Name" and contains(text(),"returnCode")]/parent::*[namespace-uri()="http://fakens.com"]/*[local-name()="Value"]/text()' -
这有点迂回和烦人,但它是正确的。
我希望这可以帮助你 :)
cat yourXML.xml | grep -A 1 'returnCode' | tail -1 | grep -oP '(?<=<java:Value>).*' | cut -d '<' -f1
可以有多种方法来做到这一点,但目前我想出了这个。
其它的办法...
grep 返回代码文件 -A1 | 尾-1 | 剪切 -d\\< -f2 | 剪切 -d> -f2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.