質問

インデントやコメントなど、レイアウトを可能な限り維持しながらXMLファイルを変更するために何を使用しますか?

私の問題は、ユーザーインターフェースを記述する手作業で編集された大量のXMLファイルがいくつかあり、いくつかの属性を別の言語に翻訳する必要があることです。

Python + ElementTreeを使用してこれを試しましたが、空白もコメントも保持されませんでした。

同様の質問に対してXSLTが提案されているのを見てきましたが、各属性に対していくつかのロジックとルックアップを行う必要があるため、この場合の代替とは思いません。

各要素の属性の順序も保持されることが望ましいですが、順序の変更は許容できます。

役に立ちましたか?

解決

すべてのDOM操作モジュールは、ニーズに合っている必要があります。レイアウトは単なるテキストデータであるため、DOMではテキストノードとして表されます。

>>> from xml.dom.minidom import parseString
>>> dom = parseString('''\
... <message>
...   <text>
...     Hello!
...   </text>
... </message>''')
>>> dom.childNodes[0].childNodes
[<DOM Text node "u'\n  '">, <DOM Element: text at 0xb765782c>, <DOM Text node "u'\n'">]
>>> text = dom.getElementsByTagName('text')[0].childNodes[0]
>>> text.data = text.data.replace(u'Hello', u'Hello world')
>>> print dom.toxml()
<?xml version="1.0" ?><message>
  <text>
    Hello world!
  </text>
</message>

他のヒント

xt などのXSLTプロセッサを使用する場合、拡張機能を記述できます。必要な任意の変換を実行できるJavaのメソッド。

とはいえ、Pythonの xml.dom.minidom この種の変換のためのモジュール。空白とレイアウトは保持されます。

scroll top