我正在尝试将声称是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 :(得分:3)
正如许多人所说,这不是XML 。
话虽如此,几乎是XML 和 WANTS是XML ,所以我认为你不应该使用正则表达式来解决它内部的问题({{ 3}})。
无论您何时获取流,转储到字符串中,将0=
更改为zero=
之类的内容并尝试解析它。
如果您必须返回发件人,请不要忘记撤消操作。
如果您正在阅读文件,则可以执行以下操作:
var txt = File.ReadAllText(@"\path\to\wannabe.xml");
var clean = txt.Replace("0=", "zero=");
var doc = new XmlDocument();
doc.LoadXml(clean);
这不能保证删除所有潜在的XML问题 - 但它应该删除你拥有的那个。
答案 1 :(得分:3)
只需用'_'替换数字值 示例:“0 =”替换为“_0 =” 我希望能解决这个问题,谢谢。
答案 2 :(得分:2)
它可能声称是一个XML文档,但声明显然是错误的,所以你应该拒绝该文档。
处理错误XML的唯一好方法是找出产生它的软件位,然后修复它或丢弃它。如果人们开始容忍几乎是XML但不完全的东西,那么XML的所有好处就会消失。
答案 3 :(得分:0)
0=""
显然使用了无效的属性名称0
。如果您无法在创建XML的源上修复它,则可能必须执行查找/替换以尝试修复XML。您可以使用RegEx
来尝试更有效地处理XML字符串。