5

我有一个这样的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>

我正在尝试使用 SelectNodes 选择属性节点,并且尝试了以下操作:

root.SelectNodes("property");
root.SelectNodes("//property");
root.SelectNodes("/session-factory/property");
root.SelectNodes("descendant::property");
root.LastChild.SelectNodes("child::property");

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

4

3 回答 3

5

看看这个长答案:

为什么需要 XmlNamespaceManager?

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

于 2012-07-27T14:42:16.080 回答
1
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);

于 2020-06-18T13:22:44.373 回答
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();

在此处查看 msdn 以获取更多信息:http: //msdn.microsoft.com/en-us/library/bb943906.aspx

于 2012-07-27T14:50:01.223 回答