I'm a noob using LUA. I'm breaking my head trying to extract some text in a XML inside this tags "<>"
<?xml version="1.0" encoding="UTF-8"?>
<ejemplar gaceta="Gaceta de Notificaciones de la Dirección Divisional de Patentes" volumen="12 de mayo" fecha_puesta_circulacion="12 de mayo de 2022" schemaLocation="http://siga.impi.gob.mx/resources/xsd/gaceta.xsd">
<seccion nombre="Solicitudes de Patentes">
<ficha>
<campo>
<clave><![CDATA[Número del Oficio]]></clave>
<valor><![CDATA[42207]]></valor>
</campo>
<campo>
<clave><![CDATA[Fecha del Oficio]]></clave>
<valor><![CDATA[10 de Mayo de 2022]]></valor>
</campo>
<campo>
<clave><![CDATA[Descripción general del asunto]]></clave>
<valor><![CDATA[Procede el otorgamiento.]]></valor>
</campo>
I want to extract this text to put it on multiple variables
<ejemplar gaceta="Gaceta de Notificaciones de la Dirección Divisional de Patentes" volumen="12 de mayo" fecha_puesta_circulacion="12 de mayo de 2022" schemaLocation="http://siga.impi.gob.mx/resources/xsd/gaceta.xsd">
And finally obtain
gaceta = "Gaceta de Notificaciones de la Dirección Divisional de Patentes"
volumen = 12 de mayo
fecha_puesta_circulacion="12 de mayo de 2022"
CodePudding user response:
It's much easier to extract information from XML documents if you use XML tools and APIs. The information that you are looking to extract are the values of different attributes.
You can select all of them from the ejemplar
element with this XPath: /ejemplar/@*
If you just wanted the attribute named gaceta
: /ejemplar/@gaceta
All attributes in the document? //@*
Not sure what the best libraries are for XML and XPath support in LUA, but some quick searches point to: https://github.com/bkersten/lua-xpath,
CodePudding user response:
Use string.gmatch
to split string into name=value
pairs
local str = [=[
<?xml version="1.0" encoding="UTF-8"?>
<ejemplar gaceta="Gaceta de Notificaciones de la Dirección Divisional de Patentes" volumen="12 de mayo" fecha_puesta_circulacion="12 de mayo de 2022" schemaLocation="http://siga.impi.gob.mx/resources/xsd/gaceta.xsd">
<seccion nombre="Solicitudes de Patentes">
<ficha>
<campo>
<clave><![CDATA[Número del Oficio]]></clave>
<valor><![CDATA[42207]]></valor>
</campo>
<campo>
<clave><![CDATA[Fecha del Oficio]]></clave>
<valor><![CDATA[10 de Mayo de 2022]]></valor>
</campo>
<campo>
<clave><![CDATA[Descripción general del asunto]]></clave>
<valor><![CDATA[Procede el otorgamiento.]]></valor>
</campo>
]=]
local ejemplars = {}
for ejemplar in str:gmatch"<ejemplar (.-)>" do
local vars = {}
for name, value in ejemplar:gmatch'([%w_] )="(.-)"' do
vars[name] = value
end
table.insert(ejemplars, vars)
end
for j = 1, #ejemplars do
print(ejemplars[j].gaceta)
print(ejemplars[j].volumen)
print(ejemplars[j].fecha_puesta_circulacion)
end