我尝试使用 LuaXml 库。但是它的功能是有限的,因为它只返回特定属性的第一个子表,并且不会更进一步。然后我尝试了字符串模式匹配,它有效,但我走到了死胡同,它无法完全完成任务。LuaExpat 库存在于我的 lua 的 lib 文件夹中,并且还有一个名为 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 ID 及其相应的目标类型和目标名称,以及它的关系类型和实例 ref 的 ID,以及它的目标类型和目标名称,例如:
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 让我知道它对我不起作用的可能原因。