シェルスクリプトはXMLタグの価値を得る

以下のXMLデータがあります。


       flagCount
       Y


       returnCode
       001

I want to get only Value of Name "returnCode" (Value is 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

シェルスクリプトで実装する方法

0
あなたのXMLファイルは xmlns:java = "(schema_link)" のようなディレクティブで java 名前空間をどこかに定義するべきです。それを見つけて、xmllintに setns java =(schema_link)コマンドを追加してください。これでエラーは取り除かれるはずです。しかし、あなたのxpath式は Y 001 の両方を返します。
追加された 著者 Timekiller,
あなたのXMLファイルは xmlns:java = "(schema_link)" のようなディレクティブで java 名前空間をどこかに定義するべきです。それを見つけて、xmllintに setns java =(schema_link)コマンドを追加してください。これでエラーは取り除かれるはずです。しかし、あなたのxpath式は Y 001 の両方を返します。
追加された 著者 Timekiller,
ルートノードがないため、XMLデータは不完全なようです。 stackoverflow.com/questions/6797806/… が定義されていません
追加された 著者 leiyc,
ルートノードがないため、XMLデータは不完全なようです。 stackoverflow.com/questions/6797806/… が定義されていません
追加された 著者 leiyc,

4 答え

これがお役に立てば幸いです。

cat yourXML.xml | grep -A 1 'returnCode' | tail -1 | grep -oP '(?<=).*' | cut -d '<' -f1

これを行うには複数の方法がありますが、現在私はこれを思い付きました。

1
追加された

これがお役に立てば幸いです。

cat yourXML.xml | grep -A 1 'returnCode' | tail -1 | grep -oP '(?<=).*' | cut -d '<' -f1

これを行うには複数の方法がありますが、現在私はこれを思い付きました。

1
追加された

別の方法...

grep returnCode file -A1 | tail -1 | cut -d\< -f2 | cut -d> -f2

1
追加された

別の方法...

grep returnCode file -A1 | tail -1 | cut -d\< -f2 | cut -d> -f2

1
追加された