3

次のようなテキストをコメントアウトしたいと思います。

<name>cranberry</name>

ただし、私のスクリプトは次のような出力を返します。

<!-- &lt;name&gt;cranberry&lt;/name&gt; -->

私のスクリプト:

import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Comment

tree = ET.parse(r"C:\sample.xml") 
root = tree.getroot() 
comment = ET.Comment("<name>cranberry</name>")
root.insert(0,comment)
tree.write(r"C:\sample1.xml")

何かアドバイスをいただければ幸いです。

4

1 に答える 1

2

Python 2.6に含まれている古いElementTreeライブラリは、実際、コメント内のデータを無条件にXMLエスケープします。

$ python2.6 -c "from xml.etree import ElementTree as ET; print ET.tostring(ET.Comment('<'))"
<!-- &lt; -->

いくつかのオプションがあります。

  • Python2.7にアップグレードします。コメントのシリアル化を正しく処理します。

    $python2.7 -c "from xml.etree import ElementTree as ET; print ET.tostring(ET.Comment('<'))"
    <!--<-->
    
  • 外部ElementTreeライブラリをインストールします。

  • Minidomを使用します(非推奨、DOM APIは過度に冗長です):

    from xml.dom import minidom
    
    doc = minidom.parse(r"C:\sample.xml")
    
    comment = doc.createComment("<name>cranberry</name>")
    doc.documentElement.appendChild(comment)
    
    doc.writexml(r"C:\sample1.xml")
    
于 2013-01-12T15:56:07.357 に答える