13

私は次のコードフラグメントを持っています:

    from xml.etree.ElementTree import fromstring,tostring
    mathml = fromstring(input)
    for elem in mathml.getiterator():
        elem.tag = 'm:' + elem.tag
    return tostring(mathml)

次のように入力するとinput

<math>
  <a> 1 2 3 </a>  <b />
<foo>Uitleg</foo>
<!-- <bar> -->
</math>

結果は次のようになります。

<m:math>
  <m:a> 1 2 3 </m:a>  <m:b />
<m:foo>Uitleg</m:foo>

</m:math>

どうして?そして、どうすればコメントを保存できますか?

編集:使用されている正確なxmlライブラリは気にしませんが、タグに貼り付けられた変更を行うことができるはずです。残念ながら、lxmlはこれを許可していないようです(そして私は適切な名前空間操作を使用できません)

4

1 に答える 1

16

そのパーサーはコメントを無視するため、を使用することはできませんxml.etree(ちなみに、これはxmlパーサーの許容可能な動作です)。ただし、(互換性のある)lxmlライブラリを使用すると、パーサーオプションを構成できます。

from lxml import etree

parser = etree.XMLParser(remove_comments=False)
tree = etree.parse('input.xml', parser=parser)
# or alternatively set the parser as default:
# etree.set_default_parser(parser)

これがはるかに簡単なオプションです。本当にxml.etreeを使用する必要がある場合は、独自のパーサーを接続してみることができますが、それでもコメントは公式にはサポートされていません。この例を見てください(xml.etreeの作成者から)(まだちなみにpython2.7)

于 2011-03-23T21:19:30.143 に答える