Reemplace el atributo del nodo principal XML con valores del nodo secundario

Reemplace el atributo del nodo principal XML con valores del nodo secundario

Tengo un archivo xml donde quiero reemplazar el texto de un nodo principal con texto del nodo secundario. Este es un ejemplo 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>

Quiero cambiar el valor del <output name="Element_...">atributo para que sea el valor de <field name="ITEM">, así obtendré:

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

Gracias

Respuesta1

  • Ctrl+H
  • Encontrar que:(<output name=").+?(?=">(?:(?!</output>).)+<field name="ITEM">(.+?)</field>)
  • Reemplazar con:$1$2
  • CONTROLAR caso de partido
  • CONTROLAR Envolver alrededor
  • CONTROLAR Expresión regular
  • CONTROLAR . matches newline
  • Replace all

Explicación:

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

Reemplazo:

$1      # content of group 1 (<output name=")
$2      # content of group 2 (the value of ITEM)

Captura de pantalla (antes):

ingrese la descripción de la imagen aquí

Captura de pantalla (después):

ingrese la descripción de la imagen aquí

información relacionada