C# 正在加载XML文档-名称不能以零字符开头

C# 正在加载XML文档-名称不能以零字符开头,c#,.net,xml,C#,.net,Xml,我试图将声称是XML文档的东西加载到任何类型的.net XML对象中:XElement、XmlDocument、或XmlTextReader。它们都会抛出一个异常: 名称不能以“0”字符、十六进制值0x30开头 该错误与一点“XML”有关 <chart_value color="ff4400" alpha="100" size="12" position="cursor" decimal_char="." 0="" />

我试图将声称是XML文档的东西加载到任何类型的.net XML对象中:
XElement
XmlDocument
、或
XmlTextReader
。它们都会抛出一个异常:

名称不能以“0”字符、十六进制值0x30开头

该错误与一点“XML”有关

<chart_value 
    color="ff4400" 
    alpha="100" 
    size="12" 
    position="cursor" 
    decimal_char="." 
    0="" 
/>

我认为问题在于作者不应该将属性命名为
0

如果我可以改变这一点,我会的,但我没有控制这个饲料。我想那些使用它的人正在使用更宽容的工具。我是否可以将其作为XML加载而不抛出错误

也没有XML声明,也没有命名空间或契约定义。我在想,我可能必须把它变成一根线,并做一个替换,但这不是很优雅。我想知道是否还有其他选项。

显然
0=”“
使用了无效的属性名
0
。如果无法在创建XML的源位置修复它,您可能需要执行查找/替换来尝试修复XML。您可以使用
RegEx
来尝试更有效地处理XML字符串。

正如许多人所说,这不是XML

话虽如此,它几乎是XML,并且想要成为XML,所以我认为不应该使用正则表达式来在它里面乱转()

无论在哪里获取流,都将其转储到字符串中,将
0=
更改为类似
0=
的内容,然后尝试解析它

如果必须返回发件人,请不要忘记反转操作


如果您正在读取文件,可以执行以下操作:

        var txt = File.ReadAllText(@"\path\to\wannabe.xml");
        var clean = txt.Replace("0=", "zero=");
        var doc = new XmlDocument();
        doc.LoadXml(clean);

这并不能保证消除所有潜在的XML问题,但它应该消除您的问题。

它可能声称是XML文档,但这种说法显然是错误的,因此您应该拒绝该文档


处理糟糕的XML的唯一好方法是找出产生它的是什么样的软件,要么修复它,要么扔掉它。如果人们开始容忍接近XML但不完全是XML的东西,那么XML的所有好处都将消失。

只需将数值替换为“\ux” 示例:“0=”替换为“\u 0=”
我希望这能解决问题,谢谢。

XML解析器总是会遇到无效的XML文档。这可能是手工制作的,或者是使用字符串连接构建的,而不是通过XML工具。事实上,这是一段完全无效的XML-因此您需要进行搜索和替换。请原谅我的迂腐编辑。想弄清楚问题的根源是这不是XML。加载坏XML、将其推入字符串并对其进行替换的最佳方法是什么?如果我加载一个XMLReader,然后执行reader.ReadOuterXml()操作,它仍然会抛出错误,因为它仍然不是有效的XML。XML非常严格,有些程序员非常愚蠢——不得不自己处理这种异常情况。这不是XML,因此XML解析器无法工作。XML对验证的基本结构要求非常严格。加载不好的XML、将其推入字符串并对其进行替换的最佳方法是什么?如果我加载一个XMLReader,然后执行reader.ReadOuterXml()操作,它仍然会抛出错误数据最初是如何到达的?从文件还是Web服务?如果是后者,它可能已经是一个字符串了。如果是文件,请使用StreamReader和ReadToEnd(),这将为您提供一个字符串。与其调用
Close()
Dispose()
(这是多余的),不如使用
using
。或者只使用
File.ReadAllText()
。抱歉,我被一些内存泄漏问题所困扰,并开始关闭和处理这两种方法。这是巫毒编码,我应该更清楚。按照你的建议清理了样本。问题是我必须从HTTP请求中提取XML…有没有办法将HTTP请求提取到文件对象中?不过,作为程序员,我们并不总是可以告诉老板让我们的供应商提高价格。我曾经有一个客户的供应商要求我们发送给他们的XML有CRLF结尾,而不是CR(或类似的东西)。这对XML来说根本不重要。但是没有办法让他们改变,所以我不得不放弃。还有一位同事,当xml元素的顺序发生变化时,他会大量抱怨。他不得不重新编写代码!可怜的东西……没有,但你可以向你的老板明确表示,你不再以XML格式与供应商交换数据,而是以专有格式,这将增加成本和风险。把它翻译成老板能理解的商业术语,你就会得到一个听证会。