XML异常:无效字符

Mei*_*ude 13 c# xml linq-to-xml

我正在开发一个小项目,它从一个长期运行的应用程序接收字符串形式的XML数据.我正在尝试将此字符串数据加载到XDocument(System.Xml.Linq.XDocument)中,然后从那里执行一些XML Magic并为数据报告创建xlsx文件.

有时,我收到包含无效XML字符的数据,并且在尝试将字符串解析为a时XDocument,我收到此错误.

[System.Xml.XmlException]消息:'?',十六进制值0x1C,是无效字符.

由于我无法控制远程应用程序,因此您可以期待任何类型的角色.

我很清楚XML有一种方法可以将字符放在其中,例如类似的&#x1C东西.

如果可能的话,我会非常喜欢保留所有数据.如果没有,那就不要了.


我已经考虑过以编程方式编辑响应字符串,然后返回并尝试重新解析如果抛出异常,但我尝试了一些方法,但它们似乎都没有成功.

谢谢你的想法.

代码就是这样的:

TextReader  tr;
XDocument  doc;

string           response; //XML string received from server. 
... 
tr = new StringReader (response);   

try
{
    doc = XDocument.Load(tr);
}
catch (XmlException e)
{
    //handle here?
}
Run Code Online (Sandbox Code Playgroud)

小智 17

您可以使用XmlReader并将XmlReaderSettings.CheckCharacters属性设置为false.这将允许您读取XML文件,尽管字符无效.从那里,您可以导入将其传递给XmlDocument或XDocument对象.

您可以在我的博客中阅读更多相关内容.

要将数据加载到System.Xml.Linq.XDocument,它将看起来像这样:

XDocument xDocument = null;
XmlReaderSettings xmlReaderSettings = new XmlReaderSettings { CheckCharacters = false };
using (XmlReader xmlReader = XmlReader.Create(filename, xmlReaderSettings))
{
    xmlReader.MoveToContent();
    xDocument = XDocument.Load(xmlReader);
}
Run Code Online (Sandbox Code Playgroud)

更多信息可以在这里找到.

  • **MSDN上的相关链接:**[XmlReaderSettings.CheckCharacters属性](http://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings.checkcharacters%28v=vs.110%29.aspx)和[XmlReader.MoveToContent Method](http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.movetocontent%28v=vs.110%29.aspx). (2认同)

gre*_*ama 11

XML几乎可以处理任何字符,但是它有范围,控制代码等等.

如果你不能让他们解决他们的输出,最好的办法是清理你收到的原始数据.您需要使用您记下的字符引用格式替换非法字符.

(你甚至无法使用CDATA,因为那里没有办法逃避这些角色.)


Ric*_*gan 10

这篇博客文章中描述的内容会有所帮助吗?

基本上,他创建了一个消毒xml流.