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> 

由于事先 斯蒂芬

+0

我的答案是否适合你? – 2014-10-17 12:23:08

坚持相同的方法与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工具/库中注册默认名称空间。