我的XML看起来像这样:
<device-attributes>
<devices>
<!--
Devices
-->
<device ipaddr="192.37.99.82" dtype="Linux" site="ELROND" node="ELROND-LC3">
<Importance>
<Value>
1
</Value>
</Importance>
<Vulnerability>
<Value>
1
</Value>
</Vulnerability>
<Properties>
<ResolvedName>
Fake.Domain.Title.com
</ResolvedName>
</Properties>
<CMDB>
<HPSM_CI_ID>
CI146826
</HPSM_CI_ID>
<HPSM_CI_COMMON_NAME>
FakeName
</HPSM_CI_COMMON_NAME>
</CMDB>
</device>
</devices>
这是一个片段(有500,000多行类似数据),但基本上我要做的就是获取设备标签和HPSM_CI_ID数据中的信息。
例如:
192.37.99.82,Linux和ELROND,ELROND-LC3,CI146826
这是我当前的XPath查询:
//devices/device[@ipaddr] | //HPSM_CI_ID
但这甚至不会返回设备标签中的IP(试图找出那部分,以便我可以将它应用于标签的所有部分)。
奖金问题:XPath是否有办法从父查询中拆分每个结果?
例如:
192.168.0.1,Linux,ELROND,ELROND-LC3,CI41563 | 102.41.51.52,窗户,ELROND,ELROND-LC3,CI24783
这会使解析数据变得容易得多,但我无法弄清楚这是否可行。
答案 0 :(得分:0)
你的XPath很接近但只是需要稍微调整一下。目前,@ipaddr
位于您的谓词中,这意味着您实际上正在查看属性为device
的{{1}},而不是找到@ipaddr
的实际值。
因此获取该值的XPath将是:
@ipaddr
但是,如果您想要每个属性,可以将其更改为:
//devices/device/@ipaddr
然后你的其他元素的XPath将是:
//devices/device/@*
虽然如果您没有从正在使用的应用程序中获取正确的元素,但您可能希望尝试使用之前搜索中的//devices/device/CMDB/HPSM_CI_ID
来获取正确的元素:
@ipaddr
这样可以获得与//devices/device[@ipaddr='192.37.99.82']/CMDB/HPSM_CI_ID
匹配的HPSM_CI_ID
的具体device