2種類。
xml2
パッケージでタグの構造を見るには、xml2::xml_structure()
を使いますが、これはcat
しているのでその文字列を再利用できない点が残念。
以前、data.tree
パッケージで木構造のデータの表示を確かめていたのでxml2
でも出来るはずと思って確認。ちょっとハマったのでメモ。xml_structre()
の方も表示される文字を得る方法を知ったのでそちらもメモ。
xml2
のデータ、xml_node
やxml_document
はas.list
で変換してはいけません。xml2
パッケージ内にas_list()
関数があるのでこれを使います。これを、data.tree::as.Node()
に与えれば良いです。例えば次のように。
data.tree::as.Node(xml2::as_list(xml2::read_xml("docx/docProps/app.xml")))
結果は次のように(最初の10行だけ)
levelName 1 Root 2 °--Properties 3 |--Template 4 |--TotalTime 5 |--Pages 6 |--Words 7 |--Characters 8 |--Application 9 |--DocSecurity 10 |--Lines
階層構造が図示されるのでちょっと見やすい。ただし、xml2::xml_structure()
のような、タグが持っている属性の表示をしてくれないので注意。逆に不要ならこっちの方がシンプルかも。
xml2::structure()
はcapture.output()
に渡すと出力する文字列を受け取れます。また、sink()
を使えばファイルに書き出せる。
x <- capture.output(xml2::xml_structure(xml2::read_xml("docx/docProps/app.xml")))
結果は
> x [1] "<Properties [xmlns, xmlns:vt]>" " <Template>" " {text}" [4] " <TotalTime>" " {text}" " <Pages>" [7] " {text}" " <Words>" " {text}" [10] " <Characters>" " {text}" " <Application>"
単にdocumentに入れるだけなら不要かな…。文字列の前の空白の数を数えて階層構造を作れば…というのもありますが、それならxml_structure()
の中を書き換えたほうが早いか…。使い分けですね。
docxの中身、構造を概観するために良い可視化方法がないか?を検討しています。もうちょっと検討するかな…。