gpt4 book ai didi

xml - 使用命名空间的 Xpath 测试

转载 作者:行者123 更新时间:2023-11-28 21:30:06 26 4
gpt4 key购买 nike

在下面的示例 1 中,要访问 DS2438 的值 Vdd 单位,我可以使用以下语法:

  • (//*[local-name() = 'Vdd'])[2]寻找5.550000
  • (//*[local-name() = 'Vdd'])[1]寻找4.280000 .

每个<owd_DS2438>链接到一个物理捕获器,每个捕获器都由唯一 ID <ROMId> 标识. XML 文件中的位置可以更改。

问题:如何在以下 2 个示例中为特定的 <ROMId> 找到相同的值使用 XPATH?

示例 1:

<?xml version="1.0" encoding="UTF-8"?>
<Devices-Detail-Response xmlns="http://www.embeddeddatasystems.com/schema/owserver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DeviceName>OWServer_v2-Enet</DeviceName>
<HostName>EDSOWSERVER2</HostName>
<MACAddress>00:04:A3:F8:62:7B</MACAddress>
<DateTime>2014-09-06 01:02:39</DateTime>
<owd_DS2438 Description="Smart battery monitor">
<Name>DS2438</Name>
<ROMId>C100000140ABC126</ROMId>
<Temperature Units="Centigrade">20.9375</Temperature>
<Vdd Units="Volts">4.280000</Vdd>
<Vad Units="Volts">10.230000</Vad>
</owd_DS2438>
<owd_DS2438 Description="Smart battery monitor">
<Name>DS2438</Name>
<ROMId>C100000140ABC127</ROMId>
<Temperature Units="Centigrade">20.9375</Temperature>
<Vdd Units="Volts">5.550000</Vdd>
<Vad Units="Volts">10.230000</Vad>
</owd_DS2438>
</Devices-Detail-Response>

示例 2:

<?xml version="1.0" encoding="UTF-8"?>
<Devices-Detail-Response xmlns="http://www.embeddeddatasystems.com/schema/owserver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DeviceName>OWServer_v2-Enet</DeviceName>
<HostName>EDSOWSERVER2</HostName>
<MACAddress>00:04:A3:F8:62:7B</MACAddress>
<DateTime>2014-09-06 01:02:39</DateTime>
<owd_DS2438 Description="Smart battery monitor">
<Name>DS2438</Name>
<ROMId>C100000140ABC127</ROMId>
<Temperature Units="Centigrade">20.9375</Temperature>
<Vdd Units="Volts">5.550000</Vdd>
<Vad Units="Volts">10.230000</Vad>
</owd_DS2438>
<owd_DS2438 Description="Smart battery monitor">
<Name>DS2438</Name>
<ROMId>C100000140ABC126</ROMId>
<Temperature Units="Centigrade">20.9375</Temperature>
<Vdd Units="Volts">4.280000</Vdd>
<Vad Units="Volts">10.230000</Vad>
</owd_DS2438>
</Devices-Detail-Response>

提前致谢斯蒂芬

最佳答案

坚持与 local-name() 相同的方法,您可以使用 xpath 表达式

//*[local-name() = 'owd_DS2438' and *[local-name() = 'ROMId'] = 'C100000140ABC127']/*[local-name() = 'Vdd']/text()

通过 ROMId 选择特定值。

但是,从您问题的上下文来看,我不清楚为什么您需要忽略命名空间。不忽略它们可能更实际。在这种情况下,xpath 将简化为

//owd_DS2438[ROMId = 'C100000140ABC127']/Vdd/text()

这更具可读性(恕我直言)。但是,这通常需要您在 xpath 工具/库中注册默认 namespace 。

关于xml - 使用命名空间的 Xpath 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25772936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com