【问题标题】:Xpath test with namespace使用命名空间进行 Xpath 测试
【发布时间】:2014-09-10 18:52:39
【问题描述】:

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

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

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

问题:如何使用 XPATH 在以下 2 个示例中为特定 <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>

提前致谢 斯蒂芬

【问题讨论】:

  • 我的回答对你有用吗?

标签: xml testing xpath namespaces xml-namespaces


【解决方案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 工具/库中注册默认名称空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2011-10-20
    • 2012-09-21
    • 2012-05-30
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多