C# 读取包含无效字符的XML文件

C# 读取包含无效字符的XML文件,c#,xml,C#,Xml,我正在使用Dataset.ReadXML()读取XML字符串。我得到一个错误,因为XML字符串包含无效字符0x1F,它是“US”-单位分隔符。这包含在完全形成的标记中 使用Perl脚本从Oracle数据库中提取数据。如何最好地转义此字符,以便正确读取XML 编辑:XML字符串: <RESULT> <DEPARTMENT>Oncology</DEPARTMENT> <DESCRIPTION>Oncology</DESCRIPTION>

我正在使用Dataset.ReadXML()读取XML字符串。我得到一个错误,因为XML字符串包含无效字符0x1F,它是“US”-单位分隔符。这包含在完全形成的标记中

使用Perl脚本从Oracle数据库中提取数据。如何最好地转义此字符,以便正确读取XML

编辑:XML字符串:

<RESULT>
<DEPARTMENT>Oncology</DEPARTMENT> 
<DESCRIPTION>Oncology</DESCRIPTION> 
 <STUDY_NAME>**7360C hsd**</STUDY_NAME> 
 <STUDY_ID>27</STUDY_ID> 
</RESULT>

肿瘤科
肿瘤科
**7360C hsd**
27

在粗体部分的C和h之间,有一个US分隔符,当粘贴到这里时,实际上显示了一个空格。所以我想知道如何在XML字符串中忽略它?

必须使用正确的编码创建XmlReader/TextReader。您可以按如下方式创建它并将其传递到Dataaset:

StreamReader reader = new StreamReader("myfile.xml",Encoding.ASCII); // or correct encoding
myDataset.ReadXml(reader);
如果查看,您将看到x01F不在XML文档中允许的字符范围内。因此,虽然您正在查看的字符串在您看来可能像XML文档,但它不是XML文档

你有两个问题。相对较小的问题是如何处理此文档。我可能会对字符串进行预处理,并丢弃任何在格式良好的XML中不合法的字符,但我对相对较大的问题一无所知

相对较大的问题是:这些数据首先在那里做什么?什么目的(如果有的话)在一个(大概的)人类可读数据场的中间做不可见的ASCII字符?为什么生成此字符串的Perl脚本在遇到非法字符时没有失败


我敢打赌,这是因为编写脚本的人使用字符串操作而不是XML库来生成XML文档。这就是为什么,正如我一次又一次说过的,您永远不应该使用字符串操作来生成XML。(当然也有例外。例如,如果您正在编写一次性应用程序或XML解析器,或者您的名字是Tim Bray。)

您可以发布XML stirng的摘录吗?粘贴方式如上,但结果非常奇怪?您需要选择XML并按Control-K将其放入代码块中。我是为你做的。当它不是XML时,请不要将其称为“XML字符串”。您需要更正创建无效XML的进程,而不是修复读取该XML的进程。我获得了“路径中的非法字符”?这必须来自StreamReader和您正在传递的路径。仔细检查你的路线。我会在下午试一试。谢谢。-1-编码并不能将您从数据中的随机垃圾中解救出来。数据是(显然)最初存储在MS Access文件中的遗留数据,已转移到SQl,现在需要可供查看。我使用的是一个XML库:,尽管我刚刚切换到了它,因为上一个版本使用的是字符串操作。如果使用XML库,坏数据的问题仍然存在,但至少您已经消除了编写格式不好的XML的“XML字符串”的问题。您仍然需要找出如何处理这些坏数据并加以修复。但至少现在你把它固定在一个接近正确的位置。