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