我正在从事一个小项目,该项目从一个长期运行的应用程序接收字符串形式的XML数据。我试图将此字符串数据加载到XDocument
(System.Xml.Linq.XDocument
)中,然后从中执行一些Xml魔术,并为数据报告创建一个xlsx文件
有时,我会收到包含无效XML字符的数据,当尝试将字符串解析为XDocument
时,我会遇到此错误
[System.Xml.XmlException]
消息:“?”,十六进制值0x1C,是无效字符
因为我无法控制远程应用程序,所以您可以期望任何类型的角色
我很清楚,XML有一种可以在其中放入字符的方式,比如&#x1C
或类似的东西
如果可能的话,我很想保留所有的数据。如果没有,那就让它去吧
我曾考虑过以编程方式编辑响应字符串,然后返回并尝试在抛出异常时重新解析,但我尝试了几种方法,但没有一种方法成功
谢谢你的想法
代码是这样的:
文本阅读器tr;
XDocument文件;
字符串响应//从服务器接收的XML字符串。
...
tr=新的StringReader(响应);
尝试
{
doc=XDocument.Load(tr);
}
捕获(XMLE异常)
{
//在这里处理?
}
您可以使用XmlReader并将XmlReaderSettings.CheckCharacters属性设置为false。这将允许您读取XML文件,尽管其中包含无效字符。从那里可以导入并将其传递到XmlDocument或XDocument对象
你可以在我的博客上读到更多关于我的信息
要将数据加载到System.Xml.Linq.XDocument中,它看起来有点像这样:
XDocument XDocument=null;
XmlReaderSettings XmlReaderSettings=新XmlReaderSettings{CheckCharacters=false};
使用(XmlReader=XmlReader.Create(文件名,xmlReaderSettings))
{
xmlReader.MoveToContent();
xDocument=xDocument.Load(xmlReader);
}
更多信息可以在这里找到