我正在通过教学视频。这应该是执行简单的代码,并在下面列出了简单的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>
答案 0 :(得分:0)
运行代码会给我一个错误:
未处理的类型&#39; System.Xml.XmlException&#39;发生在System.Xml.dll
中其他信息:系统不支持&#39; utf-8?&#39;编码。第1行,第31位。
这表明您的XML格式存在问题,特别是在编码方面。查看您的编码标记,您可以注意到您的编码实际上应该使用encoding="utf-8"
进行设置,但您还要包含XML标记结束时的?
。
因此,请在两个XML文档中修复您的编码,如下所示:
<?xml version="1.0" encoding=""utf-8" ?>
现在再次运行代码会导致出现另一个错误:
未处理的类型&#39; System.Xml.XmlException&#39;发生在System.Xml.dll
中其他信息:&#39; acc&#39;第4行第4位的开始标记与&#39; account&#39;的结束标记不匹配。第4行,第24位。
这意味着您的代码必须无效。查看您的帐户代码,您会看到您使用<acc name="">
打开并尝试使用</account>
关闭。这些必须一致。所以像这样修复每一行:
<acc name="">value</acc>
这将允许您成功构建和运行程序,为您提供预期的输出。
如果现在您的例外是找不到该文件,则需要将程序中的路径(如果使用Visual Studio)更改为:
var doc = XElement.Load("../../acct.xml");
...这是XML文件可能所在的基本文件夹的相对路径。根据需要进行调整,或为其提供文件的完整路径。
答案 1 :(得分:-1)
您的XML格式不正确,请在此处查看: