Почему получение элементов из XDocument приводит к нулю? - PullRequest
3 голосов
/ 03 августа 2009

Может кто-нибудь объяснить мне, почему xml1.Element ("title") правильно равно "<title>Customers Main333</title>", но xml2.Element ("title") неожиданно равно null , т. е. почему я должен получить XML-документ как элемент вместо document , чтобы извлечь из него элементы?

var xml1 = XElement.Load(@"C:\\test\\smartForm-customersMain.xml");
var xml2 = XDocument.Load(@"C:\\test\\smartForm-customersMain.xml");

string title1 = xml1.Element("title").Value;
string title2 = xml2.Element("title").Value;

XML:

<?xml version="1.0" encoding="utf-8" ?>
<smartForm idCode="customersMain">
    <title>Customers Main333</title> 
    <description>Generic customer form.</description>
    <area idCode="generalData" title="General Data">
        <column>
            <group>
                <field idCode="anrede">
                    <label>Anrede</label>
                </field>
                <field idCode="firstName">
                    <label>First Name</label>
                </field>
                <field idCode="lastName">
                    <label>Last Name</label>
                </field>
            </group>
        </column>
    </area>
    <area idCode="address" title="Address">
        <column>
            <group>
                <field idCode="street">
                    <label>Street</label>
                </field>
                <field idCode="location">
                    <label>Location</label>
                </field>
                <field idCode="zipCode">
                    <label>Zip Code</label>
                </field>
            </group>
        </column>
    </area>
</smartForm>

Ответы [ 3 ]

9 голосов
/ 03 августа 2009

XDocument представляет весь документ, а не корневой узел . Используйте Root, чтобы получить корневой элемент.

var title = xml2.Root.Element("title").Value; 

должно работать.

2 голосов
/ 03 августа 2009

Это потому, что XDocument имеет самый внешний слой, который требует, чтобы вы просверлили его, чтобы добраться до элементов. Значение XElement предназначено для самого элемента.

0 голосов
/ 03 августа 2009

Насколько я понимаю, многие реализации DOM в качестве документа имеют уровень выше корневого элемента, что позволяет последовательно добавлять и т.д. нет корневого элемента.

При разборе только элемента это не нужно и не полезно, поэтому оно опускается.

Вы должны иметь возможность использовать .Root для получения корневого элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...