为什么我在XElement上抛出异常.加载(..)
本文关键字:加载 抛出异常 XElement 为什么 | 更新日期: 2023-09-27 18:01:06
我正在制作一段教学视频。这应该是一个简单的代码来执行并显示下面列出的一个简单XML。在视频中,您可以看到代码运行良好,并在一个简单的DOS框中显示XML。
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
namespace XMLPROC
{
class Program
{
static void Main(string[] args)
{
var doc = XElement.Load("acct.xml");
var qry = from ele in doc.Elements("acc")
select ele;
foreach (var ele in qry)
{
Console.WriteLine("Account --> " + ele);
}
Console.WriteLine(">>>>>> Name Space Section <<<<<<");
var doc2 = XElement.Load("acct2.xml");
var qry2 = from ele in doc2.Elements("{urn:accounting}accounts")
select ele;
Console.ReadKey();
}
}
}
XML 1:
<?xml version="1.0" encoding="utf-8" ?>
<accounts>
<acc name="AC1">100</account>
<acc name="AC2">200</account>
<acc name="AC3">300</account>
<acc name="AC4">400</account>
<acc name="AC5">500</account>
<acc name="AC6">600</account>
<acc name="AC7">700</account>
<acc name="AC8">800</account>
<acc name="AC9">900</account>
</accounts>
XML 2:
<?xml version="1.0" encoding="utf-8" ?>
<accounts xmlns="urn:accounting">
<acc name="AC1">100</account>
<acc name="AC2">200</account>
<acc name="AC3">300</account>
<acc name="AC4">400</account>
<acc name="AC5">500</account>
<acc name="AC6">600</account>
<acc name="AC7">700</account>
<acc name="AC8">800</account>
<acc name="AC9">900</account>
</accounts>
---新的工作XML——
<?xml version="1.0" encoding="utf-8" ?>
<accounts>
<acc name="">100</acc>
<acc name="">200</acc>
<acc name="">300</acc>
<acc name="">400</acc>
<acc name="">500</acc>
<acc name="">600</acc>
<acc name="">700</acc>
<acc name="">800</acc>
<acc name="">900</acc>
</accounts>
-------
<?xml version="1.0" encoding="utf-8" ?>
<accounts xmlns="urn:accounting">
<acc name="">100</acc>
<acc name="">200</acc>
<acc name="">300</acc>
<acc name="">400</acc>
<acc name="">500</acc>
<acc name="">600</acc>
<acc name="">700</acc>
<acc name="">800</acc>
<acc name="">900</acc>
</accounts>
-------
<?xml version="1.0" encoding="utf-8" ?>
<bad-accounts>
<acc name="">9</acc>
</bad-accounts>
运行代码会出现错误:
类型为"System"的未处理异常。Xml。系统中出现XmlException。Xml.dll
附加信息:系统不支持"utf-8?"编码。第1行,位置31。
这表明您的XML格式有问题,特别是在编码方面。查看您的encoding标记,您可以注意到您的编码实际上应该设置为encoding="utf-8"
,但您也包含了XML标记结束时的 ?
。
因此,修复这两个XML文档中的编码,如下所示:
<?xml version="1.0" encoding=""utf-8" ?>
现在再次运行您的代码会导致另一个错误发生:
类型为"System"的未处理异常。Xml。系统中出现XmlException。Xml.dll
附加信息:第4行第4位的"acc"起始标记与"account"的结束标记不匹配。第4行,位置24。
这意味着您的标记必须无效。查看您的帐户标记,您会发现您使用<acc name="">
打开,并尝试使用</account>
关闭。这些必须是一致的。所以像这样修复每一行:
<acc name="">value</acc>
这将使您能够成功地构建和运行程序,为您提供预期的输出。
如果您现在的异常是找不到文件,则需要将程序中的路径(如果使用Visual Studio(更改为以下路径:
var doc = XElement.Load("../../acct.xml");
该路径是到XML文件可能所在的基本文件夹的相对路径。根据需要对此进行调整,或为其提供文件的完整路径。