以前質問しましたが、重複して終了しました。シェルスクリプトを使用してXMLをCSVに解析する方法は?。リンクされたコピーの答えはXMLStarletというツールを使用することを示唆していますが、OS Xでこのツールを使用する方法がわかりません。
また、「というタイトルの他のQ&Aへのリンクもあります。2 つのラベル間のテキストxslt
「?を使って示した例はうまくいきませman xlst
んでしたが、もう少し詳しく見てみると、一種のPerlスクリプトのようです。StackOverflowの内容です。、これが私をこの結論に導きます。
誰かがOS XからXMLファイルをCSVに簡単に変換する方法についての指示を提供できますか?
答え1
XMLStarletアプリケーションは次のとおりです。以下でOSXで利用可能brew
したがって、次のようにインストールできます。
$ brew install xmlstarlet
インストールしたら、コマンドラインから使用できますxmlstarlet
。
使用法
$ xmlstarlet
XMLStarlet Toolkit: Command line utilities for XML
Usage: xmlstarlet [<options>] <command> [<cmd-options>]
where <command> is one of:
ed (or edit) - Edit/Update XML document(s)
sel (or select) - Select data or query XML document(s) (XPATH, etc)
tr (or transform) - Transform XML document(s) using XSLT
val (or validate) - Validate XML document(s) (well-formed/DTD/XSD/RelaxNG)
fo (or format) - Format XML document(s)
el (or elements) - Display element structure of XML document
c14n (or canonic) - XML canonicalization
ls (or list) - List directory as XML
esc (or escape) - Escape special XML characters
unesc (or unescape) - Unescape special XML characters
pyx (or xmln) - Convert XML into PYX format (based on ESIS - ISO 8879)
p2x (or depyx) - Convert PYX into XML
<options> are:
-q or --quiet - no error output
--doc-namespace - extract namespace bindings from input doc (default)
--no-doc-namespace - don't extract namespace bindings from input doc
--version - show version
--help - show help
Wherever file name mentioned in command help it is assumed
that URL can be used instead as well.
Type: xmlstarlet <command> --help <ENTER> for command help
XMLStarlet is a command line toolkit to query/edit/check/transform
XML documents (for more information see http://xmlstar.sourceforge.net/)
はい
このサンプルファイルがあるとしましょうsample.xml
。
$ cat sample.xml
<root>
<record id="1">
<keyA>val_1A</keyA>
<keyB>val_1B</keyB>
</record>
<record id="2">
<keyA>val_2A</keyA>
<keyB>val_2B</keyB>
</record>
<record id="3">
<keyA>val_3A</keyA>
<keyB>val_3B</keyB>
</record>
</root>
このファイルを各レコード(1、2、3)と各レコードに対応する値(keyA、keyB)を1行に含むCSVに解析するには、concat
次のコマンドを使用します。
$ xmlstarlet \
sel -T -t -m /root/record \
-v "concat(@id,',',keyA,',',keyB)" \
-n sample.xml
これにより、次のような出力が生成されます。
1,val_1A,val_1B
2,val_2A,val_2B
3,val_3A,val_3B
上記のコマンドのワークハウス行はこのconcat()
関数です。これはXMLレコードから要素を取得します/root/record
。