Xpath的试验与命名空间
问题描述:
在下面的例子1到访问值Vdd的的DS2438我可以使用下面的语法的单位:Xpath的试验与命名空间
-
(//*[local-name() = 'Vdd'])[2]
找到5.550000
和 -
(//*[local-name() = 'Vdd'])[1]
找到4.280000
。
每个<owd_DS2438>
链接到物理捕手,其中的每一个是由唯一的ID <ROMId>
识别。 XML文件中的位置可以更改。
问题:如何使用XPATH在特定的<ROMId>
的以下两个示例中找到相同的值?
实施例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工具/库中注册默认名称空间。
我的答案是否适合你? – 2014-10-17 12:23:08