Элемент Xml с пространством имен - PullRequest
0 голосов
/ 25 февраля 2009

Мы начинаем использовать nhibernate и настроили Session Manager для создания новой SessionFactory. Мне нужно изменить некоторую информацию при первом запуске приложения.

Я открываю файл конфигурации (не app.config) с помощью XDocument.

<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");

x - ноль, если я не удаляю xmlns. Чего мне не хватает?

Ответы [ 2 ]

3 голосов
/ 25 февраля 2009

Похоже, вы вызываете элемент по его локальному имени из пустого пространства имен, а не из нового пространства имен, которое вы добавили здесь:

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

попробуйте это:

xdoc.Root.Element(XName.Get("hibernate-configuration", "urn:nhibernate-configuration-2.2"))
1 голос
/ 25 февраля 2009

Вам необходимо передать этот URI пространства имен с помощью XName.Get, в противном случае вы получите совпадение только для элементов в пустом пространстве имен по умолчанию.

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