4 Stimmen

XML unter Beibehaltung des Layouts ändern

Was würden Sie verwenden, um eine XML-Datei zu ändern, während so viel wie möglich des Layouts, einschließlich Einrückung und Kommentare zu bewahren?

Mein Problem ist, dass ich ein paar riesige handbearbeitete XML-Dateien habe, die eine Benutzeroberfläche beschreiben, und jetzt muss ich mehrere Attribute in eine andere Sprache übersetzen.

Ich habe versucht, dies mit Python + ElementTree zu tun, aber es nicht weder Whitespace noch Kommentare erhalten.

Ich habe gesehen, dass XSLT für ähnliche Fragen vorgeschlagen wird, aber ich glaube nicht, dass das in diesem Fall eine Alternative ist, da ich einige Logik und Nachschlagen für jedes Attribut tun muss.

Es wäre besser, wenn die Reihenfolge der Attribute in den einzelnen Elementen erhalten bliebe, aber ich kann eine veränderte Reihenfolge tolerieren.

2voto

Denis Otkidach Punkte 30334

Jedes Modul zur DOM-Manipulation sollte Ihren Bedürfnissen entsprechen. Layout ist nur ein Text-Daten, so ist es als Text-Knoten in DOM dargestellt:

>>> 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>

1voto

Greg Hewgill Punkte 882617

Wenn Sie einen XSLT-Prozessor wie xt können Sie in Java Erweiterungsmethoden schreiben, die jede beliebige Umwandlung durchführen können, die Sie benötigen.

Abgesehen davon habe ich Pythons xml.dom.minidom Modul erfolgreich für diese Art der Umwandlung. Leerzeichen und Layout bleiben dabei erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X