OS Xでxmlstarletを使用してXMLをCSVに変換する方法について混乱していますか?

OS Xでxmlstarletを使用してXMLをCSVに変換する方法について混乱していますか?

以前質問しましたが、重複して終了しました。シェルスクリプトを使用して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

引用する

関連情報