【问题标题】:Parsing SOAP message with XPath strings使用 XPath 字符串解析 SOAP 消息
【发布时间】:2012-08-22 03:02:31
【问题描述】:

使用http://www.w3schools.com/xpath/xpath_examples.asp 中定义的 XPath 方法 我可以轻松访问 XML 字符串中的元素。但这不适用于像我下面这样的 SOAP 数据包。我得到的错误是“未声明 SOAP-ENV”。

我的 XPath 字符串

/SOAP-ENV:Envelope/SOAP-ENV:Body/SpRc:ScanPortsResponse/SpRc:PortDescs[1]

XML/SOAP 消息

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SpRc="urn:SpRc">
    <SOAP-ENV:Body>
        <SpRc:ScanPortsResponse>
            <SpRc:PortDescs>
                <SpRc:item>
                    <SpRc:Serial>4215002032</SpRc:Serial>
                    <SpRc:TypeNumber>215</SpRc:TypeNumber>
                    <SpRc:Ip>4M5rAQ==</SpRc:Ip>
                    <SpRc:Mac>GDAAURgk</SpRc:Mac>
                    <SpRc:FirmwareVersion>1</SpRc:FirmwareVersion>
                    <SpRc:FirmwareVariant>0</SpRc:FirmwareVariant>
                    <SpRc:Port>1</SpRc:Port>
                    <SpRc:OutputType>28738</SpRc:OutputType>
                    <SpRc:Capabilities>97</SpRc:Capabilities>
                    <SpRc:InUse>1</SpRc:InUse>
                </SpRc:item>
            </SpRc:PortDescs>
            <SpRc:SpRcResult>0</SpRc:SpRcResult>
        </SpRc:ScanPortsResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

【问题讨论】:

    标签: xml soap xpath xml-parsing


    【解决方案1】:

    这似乎是 XML 命名空间的问题。您的 XPath 解析器似乎可以识别名称空间。尝试在解析 XML 之前在解析器中设置 SOAP 命名空间。

    【讨论】:

    • 我实际上在 SOAP 消息的根标记中定义了命名空间,我相信这就是 XPATH 找不到它的原因。如果我再往下一层就可以了。
    【解决方案2】:

    Abhinav Sarkar 上面的答案是正确的,但我想详细说明一下。你需要使用

    /SOAP-ENV:Body/SpRc:ScanPortsResponse/SpRc:PortDescs[1]
    

    而不是

    /SOAP-ENV:Envelope/SOAP-ENV:Body/SpRc:ScanPortsResponse/SpRc:PortDescs[1]
    

    因为 XPATH 向后查找命名空间,如果父标记是定义命名空间的位置,那么它将不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 2018-10-18
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      相关资源
      最近更新 更多