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

3

有人可以解释一下为什么 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个回答

8
XDocument代表整个文档,而不是根节点。使用Root获取根元素。
var title = xml2.Root.Element("title").Value; 

应该可以正常工作。


2
这是因为 XDocument 有一个最外层,需要您深入到元素才能获取。 而 XElement 直接定位到实际元素本身。

0
据我所知,许多DOM实现“作为文档”在根元素之上具有一个级别,允许一致的“添加”等操作。您可以引用此级别,而不是根元素。
当仅解析元素时,这是不必要或无用的,因此被省略。
您应该能够使用.Root来获取根元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接