我遇到了XPath请求的问题。
<mainNode id="id35" soapenc:root="0">
<node1 xsi:type="soapenc:string">response1</node1>
<node2 xsi:type="soapenc:string"/>
<node3 xsi:type="soapenc:string">response2</node3>
<node4 xsi:type="soapenc:string">response3</node4>
<node5 href="#id156"/>
</mainNode>
我的XPath请求:
/ mainNode /节点1 /文本()
结果:
错误 - 看起来像XML格式不正确:与元素类型“mainNode”关联的属性“soapenc:root”的前缀“soapenc”未绑定。
有什么想法吗?
PS:我从SOAP WebService获取此XML文件
答案 0 :(得分:0)
很高兴看到完整的XML示例,但听起来您的问题与名称空间管理有关。您也没有指定您使用的语言,但是您看过XML namespaces and XPath。下面是来自@harpo答案的一篇文章,展示了如果你真的不关心它们,如何从XML文档中删除命名空间。
&#34;如果你真的需要对将要使用的文件执行XPath 未知的命名空间,你真的不关心它,你需要 将其剥离并重新加载文档。 XPath不适用于 命名空间无关的方式,除非你想使用local-name() 在选择器的每个点都起作用。&#34;
private XmlDocument StripNamespace(XmlDocument doc)
{
if (doc.DocumentElement.NamespaceURI.Length > 0)
{
doc.DocumentElement.SetAttribute("xmlns", "");
// must serialize and reload for this to take effect
XmlDocument newDoc = new XmlDocument();
newDoc.LoadXml(doc.OuterXml);
return newDoc;
}
else
{
return doc;
}
}