El análisis o parseo de un documento XML es útil en varios contextos, ya que permite estructurar y extraer información de manera programática. Aquí hay algunas situaciones comunes en las que el análisis de documentos XML puede ser beneficioso:
1. **Integración de Sistemas:** Cuando trabajas con sistemas que intercambian datos en formato XML, el análisis te permite procesar y utilizar la información recibida o preparar datos para enviarlos a otros sistemas.
2. **Procesamiento de Configuraciones:** Algunas aplicaciones utilizan archivos XML para almacenar configuraciones. Analizar estos archivos te permite modificar o extraer información de configuración de manera programática.
3. **Web Scraping:** Al extraer datos de sitios web, a veces encuentras información estructurada en formato XML. El análisis de estos documentos te permite recuperar la información deseada.
4. **Generación de Informes:** Puedes utilizar el análisis de XML para extraer datos específicos y generar informes o resúmenes personalizados.
5. **Automatización de Tareas:** Si tienes tareas repetitivas que implican manipulación de datos en formato XML, el análisis te permite automatizar estas tareas mediante scripts o programas.
6. **Interoperabilidad:** En entornos donde se utilizan diferentes tecnologías y lenguajes de programación, el análisis de XML proporciona una forma común de compartir datos estructurados.
En general, el análisis de documentos XML es valioso cuando necesitas procesar datos estructurados de manera eficiente y precisa en entornos donde XML se utiliza como formato de intercambio de información. Supongamos que tenemos el siguiente archivo XML, llamado «archivo.xml» :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<Column> <Name>NuevoVALOR</Name> <EditField>TextLIND</EditField> <ColumnSpan0>1<6/ColumnSpan0> <Title>NUEVO</Title> </Column> <Column> <Name>NuevoVALOR</Name> <EditField>TextBox</EditField> <ColumnSpan0>4<5/ColumnSpan0> <Title>NORMAL</Title> </Column> <Column> <Name>NuevoVALOR</Name> <EditField>TextMEL</EditField> <ColumnSpan0>23</ColumnSpan0> <Title>LONG</Title> </Column> <Column> <Name>NuevoVALOR</Name> <EditField>TextSOL</EditField> <ColumnWidth>90px</ColumnWidth> <Title>suspenso</Title> </Column> |
Aquí por ejemplo, vemos que tenemos 3 campos, por cada «Column». Queremos simplificar esto y que nos muestre un archivo de texto con los 3 campos por linea, separados por una coma «,» (En estos ejemplos solo los muestro por pantalla, pero pueden ser volcados a un archivo de texto) :
1 2 3 4 5 |
awk -F'[<>]' '/<Name>/ {printf $3 ","} /<EditField>/ {printf $3 ","} /<Title>/ {printf $3 "\n"}' "archivo.xml" FIELD1,TextLIND,NUEVO FIELD2,TextBox,NORMAL FIELD3,TextMEL,LONG FIELD4,TextSOL,suspenso |
Llevarlo todo a una sola linea de texto con los campos separados por coma «.» :
1 2 |
grep -oP '<([^<]+)>([^<]+)</\1>' "archivo.xml" | sed -e 's/<[^>]*>//g' | tr -s '\n' ',' | sed -e 's/,$/\n/' FIELD1,TextLIND,NUEVO,FIELD2,TextBox,NORMAL,FIELD3,TextMEL,23,LONG,FIELD4,TextSOL,90px,suspenso |
Por último si lo que queremos es recuperar un solo campo, existen varias formas, aqui muestro algunas :
1 2 3 4 |
grep -oP '(?<=<Title>).*?(?=</Title>)' archivo.xml grep -oP "<Title>(.*)</Title>" archivo.xml | cut -d ">" -f 2 | cut -d "<" -f 1 awk -F "[><]" '/Title/{print $3}' archivo.xml sed -n 's:.*<Title>\(.*\)</Title>.*:\1:p' archivo.xml |
Al ejecutar cualquier de los codigos anteriores, nos mostraría :
1 2 3 4 |
NUEVO NORMAL LONG Suspenso |
Supongamos que queremos cambiar el valor del campo «Name», Poner el mismo valor a este campo en todo el documento XML , lo haríamos con el siguiente código :
1 |
awk -v campo="Name" -v nuevo="NuevoVALOR" 'BEGIN{FS=OFS="<|>"} {gsub("<"campo">[^<]+<", "<"campo">"nuevo"<")} 1' "archivo.xml" |
Esto nos modificaría todo el archivo XML, que presentamos al principio de este articulo :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<Column> <Name>NuevoVALOR</Name> <EditField>TextLIND</EditField> <ColumnSpan0>1<6/ColumnSpan0> <Title>NUEVO</Title> </Column> <Column> <Name>NuevoVALOR</Name> <EditField>TextBox</EditField> <ColumnSpan0>4<5/ColumnSpan0> <Title>NORMAL</Title> </Column> <Column> <Name>NuevoVALOR</Name> <EditField>TextMEL</EditField> <ColumnSpan0>23</ColumnSpan0> <Title>LONG</Title> </Column> <Column> <Name>NuevoVALOR</Name> <EditField>TextSOL</EditField> <ColumnWidth>90px</ColumnWidth> <Title>suspenso</Title> </Column> |
Espero les sirva…..