1. SelectNodes,SelectSingleNode总是返回NULL
下面以一个简单的xml为例:
<?xml version="1.0"?>
<message xmlns="http://www.mydomain.com/MyDataFeed" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexsi:schemaLocation="http://www.mydomain.com/MyDataFeed https://secure.mydomain/MyDataFeed/myDataFeed.xsd"requestId="13898" status="1">
<error>Invalid Login</error>
</message>
下面尝试读取error节点的内容
XmlNode errorNode = xmldoc.SelectSingleNode("/message/error");
if (errorNode != null)
Console.Writeline("There is an error");
返回的结果一直为Null
产生这个问题的原因就在于上面的xml文档中使用了命名空间,当xml中定义了命名空间时,在查找节点的时候需要使用下面的方法
XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmldoc.NameTable);
nsMgr.AddNamespace("ns", "http://www.mydomain.com/MyDataFeed");
XmlNode errorNode = xmldoc.SelectSingleNode("/ns:message/ns:error", nsMgr);
如果直接想定位到error,而不是从根开始,需要写为
xmldoc.SelectSingleNode("//ns:error", nsMgr);
本文介绍了解决XML文档中因使用命名空间而导致SelectNodes和SelectSingleNode方法返回空值的问题。通过创建XmlNamespaceManager并添加命名空间前缀,可以正确地查询到指定节点。
503

被折叠的 条评论
为什么被折叠?



