2014-09-10 74 views
0

在下面的例子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

回答

1

堅持相同的方法與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工具/庫中註冊默認名稱空間。