簡體   English   中英

Shell 腳本獲取 XML 標記的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM