7036


テキストを sed で処理したり、 json を jq で処理するように、 xml
を処理したいと考えているのですが、これに適したプログラムはありますでしょうか？


CC BY-SA 3.0
2015-02-23T17:03:50.413
6980
2016-01-19T01:53:34.877
754
question
xml
xml に対する sed/jq 的なプログラム


Macを使っていれば、tidyコマンドが便利です。  
ターミナルでコマンドを入力するだけです。

test.xmlをターミナルで出力

[code]

    tidy --indent-cdata true -xml -utf8 -i test.xml
    
[/code]

test.xmlからtest2.xmlに変換

[code]

    tidy --indent-cdata true -xml -utf8 -i　-o test2.xml ./test.xml 
    
[/code]


CC BY-SA 3.0
2015-02-23T17:29:07.420
6981
2015-02-23T17:29:07.420
7639
6980
answer


XPath で指定したノードを取り出すとかでしたら、 `xmllint` コマンドがなかなかいい感じです。

[code]

    <dict>
        <prop name="foo" value="bar" />
        <prop name="hoge" value="piyo" />
    </dict>
    
[/code]

を `test.xml` として保存しておいて、

[code]

    $ xmllint --xpath "count(/dict/prop)" test.xml
    2
    $ xmllint --xpath "/dict/prop[1]" test.xml
    <prop name="foo" value="bar"/>
    $ xmllint --xpath "string(/dict/prop[@name='hoge']/@value)" test.xml
    piyo
    
[/code]

などなど。

## 参考

  * [ShellScriptでXMLの内容を取り出す | Opentone Labs.](http://labs.opentone.co.jp/?p=5273)
  * [Command line utilities for analyzing XML (xpath and xmllint) | Nishigaya's Tech Blog](http://javaflavor.hopto.org/blog/2013/01/14/xpath-and-xmllint/)


CC BY-SA 3.0
2015-02-24T13:22:07.823
7036
2015-02-24T13:22:07.823
8000
6980
answer


xmllint --xpath

この--xpathが指定できるのは、libxml version 20708 とかですね。  
libxml version 20706だと、--xpathが実装されていないので、  
Ubuntu10.04だと、10.04で動作する最新がversion 20706なので、  
このテクニックは使えないです。


CC BY-SA 3.0
2016-01-19T01:53:34.877
21045
2016-01-19T01:53:34.877
14056
6980
answer