複数の属性と名前を使用してxmlを解析する方法

複数の属性と名前を使用してxmlを解析する方法

このようなXMLスクリプトがある場合は、XML構文解析を使用して特定の名前の値を取得する方法

<?XML>
<conf>
<prop><name>something</name><value>1</value></prop>
<prop><name>one thing</name><value>2</value></prop>
<prop><name>another thing</name><value>3</value></prop>
<prop><name>one more thing</name><value>4</value></prop>
</conf>

このような行がたくさんあるとします。

答え1

value""を取得するにはXMLStarletを使用してくださいpropnameone thing

$ xmlstarlet sel -t -v '//prop[name = "one thing"]/value' -nl file.xml
2

これはXMLにXPATHクエリを適用し、値を持つノードの下のノードを選択しvalueてからそのノードの値を抽出します。propnameone thing

簡潔さのために、//propこれを使用してprop文書内の任意の場所でノードを見つけます。関心のあるノードが常にルートノードの下にある/conf/propことがわかっている場合は、これをに変更できます。propconf

同じことxmllint:

$ xmllint --xpath '//prop[name = "one thing"]/value/text()' file.xml
2

関連情報