C# XmlNode.SelectNodes返回0个节点

C# XmlNode.SelectNodes返回0个节点,c#,xml,xpath,C#,Xml,Xpath,我有这样一个xml: <?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <reflection-optimizer use="false"/> <session-factory> <property name="XX">XX</

我有这样一个xml:

 <?xml version="1.0" encoding="utf-8" ?>
 <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <reflection-optimizer use="false"/>
    <session-factory>
           <property name="XX">XX</property>
           <property name="XX">XX</property>
    </session-factory>  
  </hibernate-configuration>

但它们都返回0个节点。有人能帮我吗?谢谢。

看看这个长长的答案:


它与根节点上的名称空间有关。

我建议您使用LINQ to XML

    var xml = XDocument.Parse(
    @"<?xml version=""1.0"" encoding=""utf-8"" ?>
    <hibernate-configuration xmlns=""urn:nhibernate-configuration-2.2"">
    <reflection-optimizer use=""false""/>
    <session-factory>
    <property name=""XX"">XX</property>
    <property name=""XX"">XX</property>
    </session-factory>  
    </hibernate-configuration>");
    var properties = xml.Descendants().Where(p=>p.Name.LocalName.Equals("property")).ToList();
var xml=XDocument.Parse(
@"
XX
XX
");
var properties=xml.subjects().Where(p=>p.Name.LocalName.Equals(“属性”)).ToList();
查看msdn以了解更多信息:

var nsmgr=new-XmlNamespaceManager(root.NameTable);
nsmgr.AddNamespace(“x”,“urn:nhibernate-configuration-2.2”);
var nodes1=root.SelectNodes(“x:property”,nsmgr);
var nodes2=root.SelectNodes(“/x:session factory/x:property”,nsmgr);

这与根节点上的名称空间有关。感谢您的回复。我使用LINQtoXML工作,但我仍然想找出SelectNodes的错误。
    var xml = XDocument.Parse(
    @"<?xml version=""1.0"" encoding=""utf-8"" ?>
    <hibernate-configuration xmlns=""urn:nhibernate-configuration-2.2"">
    <reflection-optimizer use=""false""/>
    <session-factory>
    <property name=""XX"">XX</property>
    <property name=""XX"">XX</property>
    </session-factory>  
    </hibernate-configuration>");
    var properties = xml.Descendants().Where(p=>p.Name.LocalName.Equals("property")).ToList();