
Bedenken Sie, dass ich mit XML und NPP nicht vertraut bin.
Ich habe eine große XML-Datei mit mehreren tausend Datensätzen und muss Zeilen ändern, damit sie in einem anderen Programm funktioniert.
Ich habe den größten Teil der Formatumwandlung durchgeführt, bin jetzt aber auf ein Problem gestoßen.
So sieht meine XML jetzt aus:
</Value>
<name>C01</name>
<description>TEXT WITH VARYING NUBMER OF CHARACTERS FOR EACH LINE</Value>
</DPR>
und was ich will:
<DPR>
<name>C01</name>
<description>TEXT WITH VARYING NUBMER OF CHARACTERS FOR EACH LINE</description>
</DPR>
Das Problem besteht </Value>
darin, dass es durch zwei verschiedene Dinge ersetzt wird, je nachdem, ob es sich in einer Zeichenfolge von alleinstehenden Elementen befindet. Das zweite Problem, das ich habe, besteht darin, Teile einer Zeile zu ersetzen und den Rest beizubehalten – wobei der Teil, den ich behalten möchte, für jede Zeile eine andere Anzahl von Zeichen hat.
Jede Hilfe wird sehr geschätzt!
Antwort1
Ersetzen </Value
durch </DPR>
, wenn es allein in der Zeile steht:
Finde was:^ *</Value>
Ersetzen mit:</DPR>
Suchmodus: Regulärer Ausdruck
Danach sollte es keine weiteren Instanzen von geben </Value>
als die, die zusammen mit einem String stehen, daher sollte das Ersetzen trivial sein. Aber der Vollständigkeit halber...
Ersetzen von [somestringhere]</Value
-> [somestringhere]</description>
wenn es alleine in der Zeile steht:
Finde was:^(<description>.+?)</Value>
Ersetzen mit:$1</description>
Suchmodus: Regulärer Ausdruck
Im obigen Beispiel ^
steht es für den Anfang der Zeile, *
bedeutet, dass Leerzeichen vorhanden sein können oder nicht, .+?
bedeutet alle Zeichen bis zum ersten Vorkommen der Zeichenfolge danach (Weitere Informationen zu regulären Ausdrücken finden Sie hier.) und $1
in der Ersetzungszeichenfolge durch den in Klammern eingeschlossenen passenden Teil aus den Quelldaten ersetzt.
Antwort2
Am einfachsten ist es, reguläre Ausdrücke in Perl zu verwenden:
perl -i -p -e 's/</Value>\n<name>/<DPR>\n<name>/' yourfile.txt