我用C#中的XmlDocument读取XML格式的文件,一个是报表文件(.rdl),另一个是Nhibernate映射文件(Mapping.hbm.xml),但是SelectNodes,SelectSingleNode总是返回NULL,纠结半天,原因是这两个xml文件中声明有自己的命名空间。

以Nhibernate映射文件为例:

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="****" namespace="****">

<class name="CommonEntity" table="common.Entity"></class>

</hibernate-mapping>

其中的命名空间为:urn:nhibernate-mapping-2.2,要想读取到class节点,需要通过以下方式

XmlDocument xml = new XmlDocument();
xml.Load(path);

XmlNamespaceManager nsMgr = new XmlNamespaceManager(xml.NameTable);
nsMgr.AddNamespace("ns", "urn:nhibernate-mapping-2.2");


XmlNodeList classes = xml.SelectNodes("//ns:class", nsMgr);

XmlNode singleClass = xml.SelectSingleNode("/ns:hibernate-mapping/ns:class", nsMgr);

 

解决方案出自于强大的stackoverflow

http://stackoverflow.com/questions/1766254/selectsinglenode-always-returns-null

posted on 2012-12-01 12:19  Mr.Young  阅读(1910)  评论(0编辑  收藏  举报