提取“<>”标签内的文本

Extract text inside "<>" tag

我是使用 LUA 的菜鸟。我正在努力在这个标签“<>”

中提取 XML 中的一些文本
<?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>

我想提取此文本以将其放在多个变量上

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

并最终获得

gaceta = "Gaceta de Notificaciones de la Dirección Divisional de Patentes"
volumen = 12 de mayo
fecha_puesta_circulacion="12 de mayo de 2022"

如果您使用 XML 工具和 API,从 XML 文档中提取信息会容易得多。您要提取的信息是不同 attributes.

的值

您可以 select 使用此 XPath 的 ejemplar 元素中的所有这些:/ejemplar/@*

如果您只想要名为 gaceta 的属性:/ejemplar/@gaceta

文档中的所有属性? //@*

不确定 XML 和 LUA 中的 XPath 支持的最佳库是什么,但一些快速搜索指向:https://github.com/bkersten/lua-xpath

使用string.gmatch将字符串拆分为name=value

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