繁体   English   中英

XML 标签匹配但命名空间不同

[英]XML tags match but namespaces differ

我正在尝试在 php 中的服务器和 C 中的客户端之间设置 Soap 连接。我的服务器正在使用工作 wsdl 文件和 class 来添加这些方法。 我可以通过 Wireshark 确认我的客户请求已被正确接收并得到正确处理。

我的问题是无法读取服务器发送的 XML 元素的值,因为命名空间不同。 通过在我的客户端中添加调试日志,我发现错误是:

Tags 'state' and 'ns2:state' match but namespaces differ

问题:

问题似乎是服务器响应不包含任何默认名称空间:

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://www.w3.org/2005/08/adressing"
              xmlns:ns2="http://www.namespace1/">
    <env:Body>
        <ns2:HelloResponse>
            <state>OK</state>
            <intElement>123</intElement>
        </ns2:HelloResponse>
    </env:Body>
</env:Envelope>

看起来<state><intElement>不在任何命名空间中,因此它无法匹配其中一个客户端。 在我的 Wsdl 文件中,这些元素属于xmlns:s="http://www.w3.org/2001/XMLSchema"

我尝试了什么:

显而易见的解决方案是为这些元素添加一个命名空间,但我找不到办法做到这一点。 在我的 php 服务器中,我可以修改任何传入的请求,但不能影响任何返回的响应(或者至少我没有找到如何做)。

第二种解决方案:将描述这些元素的命名空间添加到我客户端的命名空间结构中,然后使用set_namespace() function。

但是我无法让它们工作,请记住我对 XML/Soap 世界还是陌生的,我们将不胜感激。

如前所述,解决方案是为这些元素添加相应的命名空间。

我设法使用ob_get_contents()并将命名空间添加到 <ns2:HelloResponse> 来做到这一点。 使用 Wireshark 对这类事情非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM