Savon ruby​​ gem将ins0添加到标签中

时间:2011-10-20 14:35:32

标签: ruby namespaces savon

使用savon gem,我得到以下请求XML:

<?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:wsdl="URL" 
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:ins0="SOME URL">
        <soap:Body>
            <ins0:Test xmlns="SOME URL">
            </ins0:Test>
        </soap:Body>
    </soap:Envelope>

但它必须是这样的:

<?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:wsdl="URL" 
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
            <Test xmlns="SOME URL">
            </Test>
        </soap:Body>
    </soap:Envelope>

注意ins0已删除。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

两个XML文档是等效的,因此只要文档由符合XML的代理程序解析就不会有问题。

Savon生成的文档只是为“SOME URL”命名空间创建ins0的命名空间前缀。这对于包含该命名空间中的许多元素的大型SOAP文档很方便。在此示例中,前缀不是必需的。

我能看到的唯一潜在问题是,Savion生成的文档似乎两次声明了ins0命名空间 - 一次在soap:Envelope中,然后再在soap:Body中。似乎是多余的,可能会出错。