…が、表示できないタグもある…。
stylex
パッケージ中ではxml2
パッケージを使用してdocx中のxmlファイルを加工しています。標準の設定では存在しないタグが、MS Word上で設定を更新すると現れたりする(w:val
の属性値が変わるだけであればいいんですがね…)ので、都度構造を確認しています。
xml2
パッケージではxml_structure()
とxml_contents()
で構造と内容を確認できます。
> xml_contents(xml) {xml_nodeset (38)} [1] <w:docDefaults>\n <w:rPrDefault>\n <w:rPr>\n <w:rFonts w ... [2] <w:latentStyles w:defLockedState="0" w:defUIPriority="0" w:defSem ... [3] <w:style w:type="paragraph" w:default="1" w:styleId="Normal">\n ... [4] <w:style w:type="paragraph" w:styleId="BodyText">\n <w:name w:va ... [5] <w:style w:type="paragraph" w:customStyle="1" w:styleId="FirstPar ... [6] <w:style w:type="paragraph" w:customStyle="1" w:styleId="Compact" ... [7] <w:style w:type="paragraph" w:styleId="Title">\n <w:name w:val=" ... [8] <w:style w:type="paragraph" w:styleId="Subtitle">\n <w:name w:va ... [9] <w:style w:type="paragraph" w:customStyle="1" w:styleId="Author"> ... [10] <w:style w:type="paragraph" w:styleId="Date">\n <w:name w:val="D ... [11] <w:style w:type="paragraph" w:customStyle="1" w:styleId="Abstract ... [12] <w:style w:type="paragraph" w:styleId="Bibliography">\n <w:name ... [13] <w:style w:type="paragraph" w:styleId="Heading1">\n <w:name w:va ... [14] <w:style w:type="paragraph" w:styleId="Heading2">\n <w:name w:va ... [15] <w:style w:type="paragraph" w:styleId="Heading3">\n <w:name w:va ... [16] <w:style w:type="paragraph" w:styleId="Heading4">\n <w:name w:va ... [17] <w:style w:type="paragraph" w:styleId="Heading5">\n <w:name w:va ... [18] <w:style w:type="paragraph" w:styleId="Heading6">\n <w:name w:va ... [19] <w:style w:type="paragraph" w:styleId="Heading7">\n <w:name w:va ... [20] <w:style w:type="paragraph" w:styleId="Heading8">\n <w:name w:va ... ...
> xml_structure(xml) <styles [xmlns:r, xmlns:w]> <docDefaults> <rPrDefault> <rPr> <rFonts [asciiTheme, eastAsiaTheme, hAnsiTheme, cstheme]> <sz [val]> <szCs [val]> <lang [val, eastAsia, bidi]> <pPrDefault> <pPr> <spacing [after]> <latentStyles [defLockedState, defUIPriority, defSemiHidden, defUnhideWhenUsed, defQFormat, count]> <style [type, default, styleId]> <name [val]> <qFormat> <style [type, styleId]> <name [val]> <basedOn [val]> <link [val]> <pPr> <spacing [before, after]> <qFormat> <style [type, customStyle, styleId]> # 以降省略
contentsの方ではすべての値が確認できるわけではない、structureの場合はcatしているらしく表示を抑制できない(headなどで最初の数行を見たいなどができない)など、不満があります。
で、xmlの構造をtree表示できないか?と調べていたところ、htmltidy
パッケージを見つけました。
https://cran.r-project.org/web/packages/htmltidy/index.html
この中で使いそうなのがxml_view()
とxml_tree_view()
。xml_tree_view()
はViewer Paneに表示してくれます。
xml_tree_view(xml)
図中の[+]をクリックすることで畳んだり開いたりできます。ただし、タグによっては表示が出来ないような…?
xml_view()
は対象のxml2のオブジェクトのタグ構造をViewer Paneに表示します。例えば次のように、xml2::xml_child()
などで子要素を抜き出してから使うと便利そうです。
xml_view(xml2::xml_child(xml, "w:docDefaults"))
ただし、xml_nodeset
の場合はうまく表示できないようです。
とりあえず見つけたので使ってみたというレベルなのでもう少し使ってみてより良い使い方がないかやってみようと思います。