LINQ to XML抛出了一个异常,我不知道为什么

本文关键字:一个 异常 为什么 我不知道 XML to LINQ | 更新日期: 2023-09-27 17:51:00

我有一个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的name值?

LINQ to XML抛出了一个异常,我不知道为什么

这是因为XML文档只需要有一个顶层"根"元素。另一方面,您的文档有两个顶级元素—即DatabaseInfoShortcutPath

您需要修改XML文档,使其具有单个top元素。您可以通过添加人工根或将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>