Ich habe eine XML-Datei, in der ich Text in einem übergeordneten Knoten durch Text aus dem untergeordneten Knoten ersetzen möchte. Dies ist eine Beispiel-XML:
<output name="Element_152">
<field name="NAME" key="true">Unit001</field>
<field name="ITEM">CommStatus</field>
</output>
<output name="Element_153">
<field name="NAME" key="true">Unit001</field>
<field name="ITEM">UnitStatus</field>
</output>
<output name="Element_...">
Ich möchte den Wert des Attributs in den Wert von ändern <field name="ITEM">
und erhalte daher Folgendes:
<output name="CommStatus">
<field name="NAME" key="true">Unit001</field>
<field name="ITEM">CommStatus</field>
</output>
<output name="UnitStatus">
<field name="NAME" key="true">Unit001</field>
<field name="ITEM">UnitStatus</field>
</output>
Danke
Antwort1
- Ctrl+H
- Finde was:
(<output name=").+?(?=">(?:(?!</output>).)+<field name="ITEM">(.+?)</field>)
- Ersetzen mit:
$1$2
- ÜBERPRÜFEN Groß-/Kleinschreibung beachten
- ÜBERPRÜFEN Umwickeln
- ÜBERPRÜFEN Regulären Ausdruck
- ÜBERPRÜFEN
. matches newline
- Replace all
Erläuterung:
(<output name=") # literally, group 1
.+? # 1 or more any character, not greedy
(?= # positive lookahead, make sure we have after:
"> # literally
(?: # non capture group, Tempered Greedy Token
(?!</output>) # negative lookahead, make sure we haven't <:output> after
. # any character
)+ # end group, must appear 1 or more times
<field name="ITEM"> # literally
(.+?) # group 2, 1 or more any character, not greedy
</field> # literally
) # end lookahead
Ersatz:
$1 # content of group 1 (<output name=")
$2 # content of group 2 (the value of ITEM)
Screenshot (vorher):
Screenshot (nachher):