我们有一个返回非常简单的XML的Web服务。
<?xml version="1.0"?>
<t:RequestResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://our.website.com/ns/" xmlns:t="http://our.website.com/ns/">
<t:Result>No candy for you today.</t:Result>
<t:Success>false</t:Success>
</t:RequestResult>
使用XMLHTTP,调用者可以轻松获取此XML。但由于"引用未声明的命名空间前缀:'t'",XPath查询无法针对此XML工作。
为什么?我会说't'前缀在某种程度上已经被声明了。 这个文档有什么问题吗?
如果你想知道为什么我们首先要使用XmlNamespaceDeclarations添加命名空间前缀,那是因为否则生成的文档不能被查询,因为它有一个目标命名空间,但没有相应的前缀,所以XPath会忽略节点名称,因为它们不属于请求(空)命名空间,并且我们不想使用像"//*[namespace-uri()='http://our.website.com/ns' and local-name()='RequestResult']"
这样的构造。