2016-04-20 6 views
-2

Lange Titel halten :)Entfernen Zeilenumbrüche in einer XML-Datei, in Tags und zwischen der Struktur

Sowieso ich viele XML-Dateien, die ich auf Fly aufzuräumen will, einfach konvertieren auf Fly mit PHP preg_replace RegEx Ausgang.

Jetzt kann ich die Änderungen nicht dauerhaft machen, also habe ich eine PHP-Funktion geschrieben, um durch die Datei zu gehen.

Was ich nicht beheben kann, ist das RegEx-Muster.

https://regex101.com/r/bN5eF4/7

Ich möchte passen:

<all-tags with-their="attribute" 
even-if-there="are-more"> 
and all the content between the start and end tag 
even if there 
are line breaks 
in between them 
</all-tags> 

Ich wette, es ist sehr einfach, aber ich habe noch nie RegEx sehr gut behandelt ... leider.

Edited

scheint, die Menschen wollen, dass ich einen Parser-Funktion von SimpleXML zu bauen, dass die XML-Datei geht throu und die Zeilenumbrüche entfernen?

Im selben Prozess möchte ich einige Elemente mit ihrem Inhalt entfernen, je nachdem, was sie in ihren Attributen angibt. Profilierung sozusagen.

Ich dachte Zeilenumbrüche und Profilerstellung vor der Verarbeitung der XML-Datei mit Xsltprocessor wäre die schnellere Wahl?

+4

nicht XML mit Regex analysieren Sie; Verwenden Sie einen echten XML-Parser. – kjhughes

+0

Zu diesem Zweck ist RegEx viel schneller, da ich es als Zeichenfolge laden und dann nur Zeilenumbrüche innerhalb von Tags und zwischen Tags entfernen möchte. – Anuga

+1

Das Erkennen, wann Sie innerhalb und zwischen Tags sind, ist kein Auftrag für Regex. – kjhughes

Antwort

0

Versuchen folgende regex:

/(?<=\>)(\r?\n)|(\r?\n)(?=\<\/)/ 

Hier können Sie Newline-Zeichen am Ende der > oder am Anfang der </ und ersetzt sie String leer suchen.

Siehe Demo auf Regex101

Basierend auf Ihrer Probe Eingabetext, werden alle Zeilenumbrüche entfernen und emittieren Inhalt wie:

<all-tags with-their="attribute" even-if-there="are-more">and all the content between the start and end tag</all-tags>