为什么从XDocument获取元素会导致null?

时间:2009-08-03 13:39:22

标签: c# linq linq-to-xml

任何人都可以向我解释为什么 xml1.Element(“title”)正确地等于“<title>Customers Main333</title>”但 xml2.Element(“title”)令人惊讶等于 null ,即为什么我必须将XML文档作为元素而不是文档才能将元素拉出来?

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 个答案:

答案 0 :(得分:9)

XDocument 代表整个文档,而不是根节点。 使用Root获取根元素。

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

应该有用。

答案 1 :(得分:2)

这是因为XDocument有一个最外层,需要您钻取以获取元素。 XElement以实际元素为目标。

答案 2 :(得分:0)

据我所知,许多DOM实现作为文档上面根元素,允许一致的“添加”等。你有一个对此的引用等级,没有根元素。

仅解析元素时,这不是必需的或有用的,因此省略。

您应该可以使用.Root来获取根元素。