LINQ to XML正在抛出异常,我无法弄清楚原因

时间:2015-05-28 19:21:03

标签: c# xml linq linq-to-xml

我有一个类似

的XML文件
<DatabaseInfo>
    <DatabaseInformation>
        <name>\\server\path\HelpDesk.accdb</name>
    </DatabaseInformation>
</DatabaseInfo>
<ShortcutPath>
    <ShortcutPathInformation>
        <name>Y:\Shortcuts</name>
    </ShortcutPathInformation>
</ShortcutPath>

和我的C#代码看起来像

var result = (from ele in XDocument.Load(@"C:\Srptupd\Database.xml").Descendants("DatabaseInformation")
              select ele).FirstOrDefault();
if (result != null)
{
    //
}

我得到一个例外

There are multiple root elements. Line 6, position 2.

如何获取DatabaseInformation和ShortcutPathInformation的名称值?

1 个答案:

答案 0 :(得分:2)

这是因为XML文档需要只有一个顶级&#34; root&#34;元件。另一方面,您的文档有两个顶级元素 - 即DatabaseInfoShortcutPath

您需要修复XML文档才能拥有一个顶级元素。您可以通过添加人工根或将XML拆分为两个来完成此操作。

以下是添加人工根的步骤:

<?xml version="1.0" encoding="UTF-8"?>
<DbAndShortcuts>
    <DatabaseInfo>
        <DatabaseInformation>
            <name>\\server\path\HelpDesk.accdb</name>
        </DatabaseInformation>
    </DatabaseInfo>
    <ShortcutPath>
        <ShortcutPathInformation>
            <name>Y:\Shortcuts</name>
        </ShortcutPathInformation>
    </ShortcutPath>
</DbAndShortcuts>

将文档拆分为两部分可能是另一种有效的解决方案:

<?xml version="1.0" encoding="UTF-8"?>
<!-- C:\Srptupd\Database.xml -->
<DatabaseInfo>
    <DatabaseInformation>
        <name>\\server\path\HelpDesk.accdb</name>
    </DatabaseInformation>
</DatabaseInfo>

<!-- C:\Srptupd\Shortcut.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<ShortcutPath>
    <ShortcutPathInformation>
        <name>Y:\Shortcuts</name>
    </ShortcutPathInformation>
</ShortcutPath>