niszetの日記

細かい情報を載せていくブログ

(R)xml2 のxml_nodeはデータが共有されているので注意が必要…(めも)

既にxml_set_attrで使ってるけども…。

xml2パッケージで切り出したnodeオブジェクトは元々のxml_documentのオブジェクトとデータが共有されています。そのため、node側を更新すると元の方も更新される。

そのため、自作の関数で値を更新したnodeとオリジナルのnodeの比較をしようとすると、両方とも書き変わってしまうわけですね…。

なので、自作の関数で値を書き込んで、xml_attr()で値を読みだしてexpect_equalかなという感じ。

また、data.frameに変換後にreadr::write_csvで書いてreadr::read_csvで読んで…とやると、列ごとのデータ型が変わってしまうので注意…。これは常に全てcharacterにしておいても良いのかも。

テストはオリジナルのxmlをxml2::write_xmlで書き出したものを持っておいて、unpackはその場ではしないようにすると良いのかな…。officer::unpackのテストはどうなってるんでしょうね。あとで確認…。