首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xpath查询多属性选择

Xpath查询多属性选择
EN

Stack Overflow用户
提问于 2013-12-05 20:29:29
回答 1查看 64关注 0票数 0

我的XML如下所示:

代码语言:javascript
运行
复制
<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查询:

代码语言:javascript
运行
复制
//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

这将使解析数据变得更加容易,但我不知道这是否可能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-05 21:57:50

您的XPath已接近,但只需稍加调整即可。目前,@ipaddr位于谓词中,这意味着您实际上正在查看具有@ipaddr属性的device,而不是查找@ipaddr的实际值。

因此,要获得该值的XPath是:

代码语言:javascript
运行
复制
//devices/device/@ipaddr

但是,如果您想要每个属性,可以将其更改为:

代码语言:javascript
运行
复制
//devices/device/@*

然后您的另一个元素的XPath是:

代码语言:javascript
运行
复制
//devices/device/CMDB/HPSM_CI_ID

尽管如果您没有从您正在使用的应用程序中获取正确的元素,那么您可能想尝试使用早期搜索中的@ipaddr来获得正确的元素:

代码语言:javascript
运行
复制
//devices/device[@ipaddr='192.37.99.82']/CMDB/HPSM_CI_ID

这将为匹配该HPSM_CI_IDdevice获得特定的ipaddr

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20410039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档