我的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,ELROND-LC3,CI41563 \ 102.41.51.52,Windows,ELROND,ELROND-LC3,CI24783
这将使解析数据变得更加容易,但我不知道这是否可能。
发布于 2013-12-05 21:57:50
您的XPath已接近,但只需稍加调整即可。目前,@ipaddr
位于谓词中,这意味着您实际上正在查看具有@ipaddr
属性的device
,而不是查找@ipaddr
的实际值。
因此,要获得该值的XPath是:
//devices/device/@ipaddr
但是,如果您想要每个属性,可以将其更改为:
//devices/device/@*
然后您的另一个元素的XPath是:
//devices/device/CMDB/HPSM_CI_ID
尽管如果您没有从您正在使用的应用程序中获取正确的元素,那么您可能想尝试使用早期搜索中的@ipaddr
来获得正确的元素:
//devices/device[@ipaddr='192.37.99.82']/CMDB/HPSM_CI_ID
这将为匹配该HPSM_CI_ID
的device
获得特定的ipaddr
。
https://stackoverflow.com/questions/20410039
复制相似问题