Ich benutze Lua 5.1. Ich möchte eine XML-Datei mit dem folgenden Muster analysieren. Wie soll ich vorgehen?

Ich habe versucht, die LuaXml-Bibliothek zu verwenden. Die Funktionalität ist jedoch eingeschränkt, da dies nur die erste Untertabelle eines bestimmten Attributs zurückgibt und nicht weiter geht. Dann habe ich den String Pattern Matching ausprobiert, der funktioniert hat, aber ich bin in eine Sackgasse geraten und konnte die Aufgabe nicht vollständig lösen. Die LuaExpat-Bibliothek befindet sich in meinem lib-Ordner von lua. Dort befindet sich auch eine Datei namens lom.lua. Aber oft funktioniert es nicht oder gibt mir den Fehler, dass "Modul nicht gefunden"

Meine XML-Datei sieht folgendermaßen aus:

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

Meine Agenda besteht darin, eine NewInstance-ID und ihren entsprechenden Zieltyp und Zielnamen sowie ihren Beziehungstyp mit und die ID der Instanz, auf die sie sich bezieht, zusammen mit ihrem Zieltyp und dem Zielnamen für z. B .: @ anzuzeige

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

Now LuaXml kann nicht verwendet werden, um dies zu erreichen. Der unten aufgeführte Code für den String-Mustervergleich hilft mir, die Aufgabe bis zum Relationstyp auszuführen, aber nicht genau

Der Code lautet:

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

Bitte schlagen Sie vor, wie ich vorgehen soll, um die XML-Datei in der erforderlichen Weise zu analysieren. Welche eingebaute Bibliothek bietet die passenden Funktionen? Falls Sie vorschlagen, LuaExpat lassen Sie mich die möglichen Gründe wissen, warum es bei mir nicht funktioniert.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage