XElement.Load读取&符号和特殊国家/地区字符时出错

时间:2014-05-30 14:55:14

标签: c# xml xml-parsing

我在从XML文件中读取&符号时遇到问题:

XElement xmlElements = XElement.Load(Path_Xml_Data_File);

我有错误时会收到错误:

<Name>Patrick & Phill</Name>

Error: Name cannot begin with the ' ' character, hexadecimal value 0x20. Xml.XmlException) A System.Xml.XmlException was thrown: "Name cannot begin with the ' ' character

或使用特殊的葡萄牙语字符:

<Extra>Direc&ccedil;&atilde;o Assistida</Extra> (= <Extra>Direcção Assistida</Extra>)

Error: Reference to undeclared entity 'ccedil'

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我担心你正在处理格式错误的XML。

要表示&符号,您加载的数据应使用“&amp; amp;”实体。

&amp; ccedil; (ç)和&amp; atilde; (ã)命名实体不是XML标准的一部分,它们更常见于HTML中(尽管可以通过使用DTD将它们添加到XML中)。

您可以先使用HtmlTidy来整理数据,或者您可以编写一些内容将裸露的&符号转换为传入文件中的实体。

例如:

public string CleanUpData(string data)
{
    var r = new Regex(@"&\s");
    string output = r.Replace(data, "&amp; ");
    output = output.Replace("&ccedil;", "ç");
    output = output.Replace("&atilde;", "ã");
    return output;
}