使用无效字符读取XML文件

时间:2011-02-16 11:59:37

标签: c# xml

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

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

编辑:XML字符串:

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

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

2 个答案:

答案 0 :(得分:2)

如果查看section 2.2 of the XML recommendation,您会发现x01F不在XML文档允许的字符范围内。因此,虽然您正在查看的字符串可能看起来像是一个XML文档,但它不是一个。

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

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

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

答案 1 :(得分:1)

必须使用正确的编码创建XmlReader / TextReader。您可以按照以下方式创建它并传递给您的数据集:

StreamReader reader = new StreamReader("myfile.xml",Encoding.ASCII); // or correct encoding
myDataset.ReadXml(reader);