带命名空间的Xml元素

时间:2009-02-25 15:44:20

标签: xml nhibernate linq-to-xml

我们开始使用nhibernate并设置了一个会话管理器来创建一个新的SessionFactory。我需要在应用程序第一次启动时修改一些信息。

我使用XDocument打开配置文件(而不是app.config)。

<settings>
  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <reflection-optimizer use="false"/>
    <session-factory>
       <property name="x">SomeValue</property>
    </session-factory>
  </hibernate-configuration>
</settings>

XDocument xdoc = XDocument.Load(<file>);
var x = xdoc.Root.Element("hibernate-configuration");

除非我删除xmlns,否则x为null。我错过了什么?

2 个答案:

答案 0 :(得分:3)

看起来你正在使用null命名空间中的本地名称而不是你在这里添加的新命名空间来调用元素:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">

试试这个:

xdoc.Root.Element(XName.Get("hibernate-configuration", "urn:nhibernate-configuration-2.2"))

答案 1 :(得分:1)

您需要使用XName.Get传递此命名空间URI,否则您将只获得&lt; hibernate-configuration&gt;的匹配项默认的空命名空间中的元素。

var x = xdoc.Root.Element (
  XName.Get ( "hibernate-configuration", "urn:nhibernate-configuration-2.2" ) );