Я использую Lua 5.1. Я хочу проанализировать файл XML следующего шаблона. Как я должен идти об этом?

Я пытался использовать библиотеку LuaXml. Но его функциональные возможности ограничены, так как он возвращает только первую подтаблицу определенного атрибута и не идет дальше. Затем я попытался сопоставить строковый шаблон, который сработал, но я зашел в тупик и не смог полностью решить задачу. Библиотека LuaExpat присутствует в моей папке lib lua, и там также есть файл с именем lom.lua. Но часто это не работает или выдает ошибку «модуль не найден»

Мой XML-файл выглядит так:

<Service>
<NewInstance ref="5A">
<Std>DiscoveredElement</Std>
<Key>5A</Key>
<Attributes>
<Attribute name="TARGET_TYPE" value="weblogic_cluster" />
<Attribute name="DISCOVERED_NAME" value="/Farm_soa4_sys20_soa4_domain/soa4_domain/WSM4_Cluster" />
<Attribute name="BROKEN_REASON" value="0" />
<Attribute name="TARGET_NAME" value="/Farm_soa4_sys20_soa4_domain/soa4_domain/WSM4_Cluster" />
<Attribute name="EMD_URL" value="https://uxsys460.schneider.com:3872/emd/main/" />
</Attributes>
</NewInstance>

<NewInstance ref="6C">
<Std>DiscoveredElement</Std>
<Key>6C</Key>
<Attributes>
<Attribute name="TARGET_TYPE" value="oracle_weblogic_nodemanager" />
<Attribute name="SERVICE_TYPE" value=" " />
<Attribute name="ORG_ID" value="0" />
<Attribute name="TARGET_NAME" value="Oracle WebLogic NodeManager-uxlab090" />
</Attributes>
</NewInstance>

<NewInstance ref="98">
<Std>DiscoveredElement</Std>
<Key>98</Key>
<Attributes>
<Attribute name="TARGET_TYPE" value="composite" />
<Attribute name="SERVICE_TYPE" value=" " />
<Attribute name="TARGET_NAME" value="SYS-IMG-Grp" />
<Attribute name="EMD_URL" value="" />
</Attributes>
</NewInstance>

<NewRelationship>
<Parent>
<Instance ref="98" />
</Parent>
<GenericRelations>
<Relations type="contains">
<Instance ref="5A" />
</Relations>
</GenericRelations>
</NewRelationship>

<NewRelationship>
<Parent>
<Instance ref="5A" />
</Parent>
<GenericRelations>
<Relations type="contains">
<Instance ref="6C" />
</Relations>
</GenericRelations>
</NewRelationship>
<NewRelationship>
<Parent>
<Instance ref="5A" />
</Parent>
<GenericRelations>
<Relations type="contains">
<Instance ref="98" />
</Relations>
</GenericRelations>
</NewRelationship>
</Service>

Моя повестка дня состоит в том, чтобы отобразить идентификатор NewInstance и соответствующий ему тип цели и имя цели, а также тип отношения с ним и идентификатор экземпляра ref, к которому он относится, а также его тип цели и имя цели, например:

NewInstance ID - 5A
Target Type - weblogic_cluster 
Target Name - /Farm_soa4_sys20_soa4_domain/soa4_domain/WSM4_Cluster
Relation Type - contains
Instance ref - 6C
Target Type - oracle_weblogic_nodemanager
Target Name - Oracle WebLogic NodeManager-uxlab090
Instance ref - 98
Target Type - composite
Target Name - SYS-IMG-Grp

Теперь LuaXml не может быть использован для достижения этой цели. Код соответствия строкового шаблона я приведу ниже, и он помогает мне выполнить задачу до типа отношения, но не точно

Код является:

a={}
b={}
c={}
d={}
p=0
i=0
q=0

local file = io.open("oem_topology_output.xml", "rb")   -- Open file   for    reading (binary data)
  for instance in file:read("*a"):gmatch("<NewInstance ref=\"(.-)\">") do
     a[i] = instance
     i = i+1
  end
file:close()
local files = io.open("oem_topology_output.xml", "rb")   -- Open file for  reading (binary data)
  for instances in files:read("*a"):gmatch("<NewInstance ref=\".-\">(.-)</NewInstance>") do
     TARGET_TYPE = instances:match('TARGET_TYPE.-value="(.-)"')
     TARGET_NAME = instances:match('TARGET_NAME.-value="(.-)"')
     b[p] = TARGET_TYPE
     c[p] = TARGET_NAME
     p =p+1
  end
local file = io.open("oem_topology_output.xml", "rb")   -- Open file   for   reading (binary data)
  for type in file:read("*a"):gmatch("<Relations type=\"(.-)\">") do
    d[q] = type
    q = q+1
  end
files:close()
for j=0,i-1 do
print("INSTANCE ID : ", a[j])
print("TARGET TYPE : ", b[j])
print("TARGET NAME : ", c[j])
print("RELATION TYPE : ",d[j])
end

Пожалуйста, предложите, какой подход я должен использовать, чтобы иметь возможность проанализировать файл XMl требуемым способом. Какая встроенная библиотека будет обеспечивать функции apt. Если вы предложите, LuaExpat сообщите мне возможные причины, почему он не работает для меня.

Ответы на вопрос(2)

Ваш ответ на вопрос