23

「行ごとに」属性の xpath セレクターの複数の結果を出力するように xmllint を取得するにはどうすればよいですか?

次の例を見てください。

  <?xml version="1.0" encoding="ISO-8859-1"?>
  <config>
          <tagX key1="value1 " key2=" value2"/>
          <tagY key3="value3" key4=" value4 "/>
  </config>


  $ xmllint example.xml --xpath "/config/*/@*"

結果は次のとおりです。

   key1="value1 " key2=" value2" key3="value3" key4=" value4 "

私が取得したいのは次のとおりです。

   key1="value1 "
   key2=" value2"
   key3="value3"
   key4=" value4 "

偶数の引用符の後に分割する必要がありますか、またはこれを行うためのより適切な方法はありますか?

のコンテンツを選択することを除いて、同じ主題について、関連する質問があります<tag>value</tag><tag attribute="value" />

4

5 に答える 5

15

あなたが試すことができます:

$ xmllint --shell inputfile <<< 'cat /config/*/@*'

grepただし、不要な行をフィルタリングするために、出力が必要になる場合があります。

于 2013-07-31T13:37:03.733 に答える
6

オプションの場合は、代わりに xmlstarlet を使用してみてください。

xmlstarlet sel -t -v "/config/*/@*" example.xml

于 2015-05-26T03:19:21.963 に答える
1

質問は古いですが、同じ問題の解決策を探してこの投稿に来たので、ここに私の解決策があります

Linux では、分割出力に sed 置換を追加します。

$ xmllint example.xml --xpath "/config/*/@*" | sed "s| key|\nkey|g"

もちろん、置換式は xml 構造と xpath クエリに依存します。

nl を追加すると、各行に行番号を追加することもできます

$ xmllint example.xml --xpath "/config/*/@*" | sed "s| key|\nkey|g" | nl

どちらが与える

   1 key1="value1 "
   2 key2=" value2"
   3 key3="value3"
   4 key4=" value4 "
于 2015-05-04T14:44:29.430 に答える