Home > OS >  Extract text inside "<>" tag
Extract text inside "<>" tag

Time:05-17

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