
Tenga en cuenta que soy nuevo en xml y npp.
Tengo un archivo xml grande con varios miles de registros y necesito cambiar líneas para que funcione en otro programa.
He realizado la mayor parte de la transformación en formato, pero ahora tengo un problema.
Cómo se ve mi xml ahora:
</Value>
<name>C01</name>
<description>TEXT WITH VARYING NUBMER OF CHARACTERS FOR EACH LINE</Value>
</DPR>
y lo que quiero:
<DPR>
<name>C01</name>
<description>TEXT WITH VARYING NUBMER OF CHARACTERS FOR EACH LINE</description>
</DPR>
El problema es sustituir </Value>
con dos cosas diferentes dependiendo de si está en una serie de stands solos. El segundo problema que tengo es reemplazar partes de una línea y conservar el resto, cuando la parte que quiero conservar tiene una cantidad diferente de caracteres para cada línea.
¡Toda ayuda es muy apreciada!
Respuesta1
Reemplazando </Value
con </DPR>
cuando existe solo en la línea:
Encontrar que:^ *</Value>
Reemplazar con:</DPR>
Modo de búsqueda: expresión regular
Después de eso, no debería haber otras instancias que </Value>
no sean las que están junto con una cadena, por lo que reemplazarlas debería ser trivial. Pero para completar...
Reemplazando [somestringhere]</Value
-> [somestringhere]</description>
cuando existe solo en la línea:
Encontrar que:^(<description>.+?)</Value>
Reemplazar con:$1</description>
Modo de búsqueda: expresión regular
En lo anterior ^
significa el inicio de la línea, *
significa que los espacios en blanco pueden existir o no, .+?
significa cualquier carácter hasta la primera aparición de la cadena después de eso (consulte aquí para obtener más información sobre expresiones regulares), y $1
en la cadena de reemplazo se sustituirá con la parte coincidente entre paréntesis en los datos de origen.
Respuesta2
La más sencilla es utilizar expresiones regulares en Perl:
perl -i -p -e 's/</Value>\n<name>/<DPR>\n<name>/' yourfile.txt