XMLファイルを読み取り、ノード名と構造のみを抽出します。

XMLファイルを読み取り、ノード名と構造のみを抽出します。

XMLファイル構造を監査し、DOMツリー構造のみを表示し、値を省略するレポートを生成する必要があります。デフォルトではノード名のみがあり、値はありません。 xmllintとxmlstarletを試してみましたが、これを行う方法がわかりません。

これを行うことができるツールや上記のツールの例を知っている人はいますか?

cat $filename.xml | xmlstarlet format -t私に必要なものを提供しますが、すべての価値を無視したいと思います。

答え1

xmllintインタラクティブシェルコマンドは、du必要なものを提供しているようです。

   du PATH
       Show the structure of the subtree under the given path or the current node.

インタラクティブでないことを望むなら、おそらく

printf '%s\n' du exit | xmllint --shell file.xml

または

xmllint --shell file.xml <<EOF
du
exit
EOF

前任者。

$ printf '%s\n' du exit | xmllint --shell rss.xml
/ > /
rss
  channel
    title
    link
    description
    copyright
    language
    lastBuildDate
    image
      url
      title
      link
    item
      title
      link
      description
      pubDate
    item
      title
      link
      description
      pubDate
    item
      title
      link
      description
      pubDate
/ >

答え2

今はすでに使っているので、xmlstarlet使い続けることをお勧めします。

このxmlstarletツールには、「XML文書の要素構造を表示する」el()サブコマンドがあります。elements

デフォルトでは、次のデータが出力されます。

$ xmlstarlet el /usr/X11R6/share/xcb/ge.xml
xcb
xcb/request
xcb/request/field
xcb/request/field
xcb/request/reply
xcb/request/reply/pad
xcb/request/reply/field
xcb/request/reply/field
xcb/request/reply/pad

属性を取得することもできます。

$ xmlstarlet el -a /usr/X11R6/share/xcb/ge.xml
xcb
xcb/@header
xcb/@extension-xname
xcb/@extension-name
xcb/@major-version
xcb/@minor-version
xcb/request
xcb/request/@name
xcb/request/@opcode
xcb/request/field
xcb/request/field/@type
xcb/request/field/@name
xcb/request/field
xcb/request/field/@type
xcb/request/field/@name
xcb/request/reply
xcb/request/reply/pad
xcb/request/reply/pad/@bytes
xcb/request/reply/field
xcb/request/reply/field/@type
xcb/request/reply/field/@name
xcb/request/reply/field
xcb/request/reply/field/@type
xcb/request/reply/field/@name
xcb/request/reply/pad
xcb/request/reply/pad/@bytes

また、見ることができますxmlstarlet el --help

valvalidate)サブコマンド(「XML文書の検証(Well-formed / DTD / XSD / RelaxNG)」)を使用してxmlstarletXML文書を検証します。デフォルトでは、文書の形式が正しいことを確認するだけですが、提供されたXSDスキーマ、文書のDTD、またはRelax-NGスキーマに対して文書を検証することもできます。

また、見ることができますxmlstarlet val --help

関連情報