当我调用webservice函数时,我得到了这个响应xml:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope>
<soap:Body>
<Response>
<Result>
<Status>Success</Status>
<Text>Some text</Text>
</Result>
</Response>
</soap:Body>
</soap:Envelope>
如您所见,响应xml不包含soap名称空间。
我想通过删除soap-stuff来转换xml,当我进行xsl转换时,我通过将soap命名空间添加到响应xml来实现这一点:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Response>
<Result>
<Status>Success</Status>
<Text>Some text</Text>
</Result>
</Response>
</soap:Body>
</soap:Envelope>
当soap名称空间未包含在响应xml中时,如何进行此转换?
答案 0 :(得分:1)
该输入格式正确,但不是名称空间良好的XML。您可以使用配置为非命名空间感知的解析器将其解析为DOM树,然后使用XSLT结构,如
<xsl:template match="*[local-name() = 'soap:Envelope']">
但是否这是可能的,如果确实如此,取决于你使用的是什么XSLT处理器,我不能在不知情的情况下给出更详细的答案。
答案 1 :(得分:-1)
这就是我称之为格式错误的XML。无论你尝试使用什么来转换它,任何合理的XSLT解析器都会给出一些“Unbound Prefix”错误的变体。因为源文档对其命名空间的使用感到“困惑”,所以任何后续的XSLT也会被混淆。
命名空间约束:前缀已声明
名称空间前缀,除非它是xml或xmlns,必须是 在start-tag中的名称空间声明属性中声明 使用前缀的元素或祖先元素中的元素 (即,其内容中出现前缀标记的元素)。 此外,最里面的这种声明中的属性值 不能是空字符串。
我担心您将不得不联系任何发布此Web服务的人,并让他们将响应格式更改为正确的XML。