Ist es möglich, eine REGEX (search replace) zu schreiben, die, wenn sie auf einer XML-Zeichenkette ausgeführt wird, diese XML-Zeichenkette schön eingerückt ausgibt?
Wenn ja, wie lautet der REGEX :)
Ist es möglich, eine REGEX (search replace) zu schreiben, die, wenn sie auf einer XML-Zeichenkette ausgeführt wird, diese XML-Zeichenkette schön eingerückt ausgibt?
Wenn ja, wie lautet der REGEX :)
Ist es möglich, einen REGEX (search replace) zu schreiben, der, wenn er auf eine XML-Zeichenkette [...anything]
Nein.
Verwenden Sie einen XML-Parser, um die Zeichenkette zu lesen, und dann einen XML-Serialisierer, um sie im "hübschen" Modus wieder auszuschreiben.
Jeder XML-Prozessor hat seine eigenen Optionen, so dass es von der Plattform abhängt, aber hier ist der etwas langatmige Weg, der bei DOM Level 3 LS-konformen Implementierungen funktioniert:
input= implementation.createLSInput();
input.stringData= unprettyxml;
parser= implementation.createLSParser(implementation.MODE_SYNCHRONOUS, null);
document= parser.parse(input);
serializer= implementation.createLSSerializer();
serializer.domConfig.setParameter("format-pretty-print", true);
prettyxml= serializer.writeToString(document);
Ich weiß nicht, ob ein Regex für sich genommen ein hübsches Druckformat für eine beliebige XML-Eingabe erstellen kann. Man bräuchte einen Regex, der von einem Programm angewandt wird, um ein Tag zu finden, die passenden schließenden Tags zu finden (wenn das Tag nicht selbst geschlossen ist), und so weiter. Die Verwendung von Regex zur Lösung dieses Problems ist wirklich das falsche Werkzeug für diese Aufgabe. Die einfachste Möglichkeit, XML hübsch auszudrucken, besteht darin, einen XML-Parser zu verwenden, ihn einzulesen, geeignete Serialisierungsoptionen zu setzen und das XML dann wieder zu serialisieren.
Warum wollen Sie Regex verwenden, um dieses Problem zu lösen?
Die Verwendung einer Regex für diese wird ein Alptraum sein. Die Einrückungsebene auf der Grundlage der Hierarchie der Knoten im Auge zu behalten, wird fast unmöglich sein. Vielleicht könnte die reguläre Ausdrucks-Engine von Perl 5.10 helfen, da sie jetzt reentrant ist. Aber lassen Sie uns diesen Weg nicht gehen... Außerdem müssen Sie CDATA-Abschnitte berücksichtigen, die XML-Deklarationen einbetten können, die von der Einrückung ignoriert und intakt gehalten werden müssen.
Bleiben Sie bei DOM. Wie in der anderen Antwort vorgeschlagen wurde, bieten einige Bibliotheken bereits eine Funktion, die einen DOM-Baum für Sie einrücken wird. Falls nicht, ist die Erstellung einer solchen Funktion viel einfacher als die Erstellung und Pflege von Regexen, die die gleiche Aufgabe erfüllen.
Die dunkle Voodoo-Regexp wie hier beschrieben funktioniert hervorragend.
http://www.perlmonks.org/?node_id=261292
Der Hauptvorteil gegenüber der Verwendung von XML::LibXMl und anderen ist, dass es um eine Größenordnung schneller ist.
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.