我正在使用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字符串中忽略它?
发布于 2011-02-17 03:26:10
如果查看section 2.2 of the XML recommendation,就会发现x01F不在文档中允许的字符范围内。因此,虽然您正在查看的字符串可能看起来像XML文档,但它不是。
你有两个问题。相对较小的问题是如何处理此文档。我可能会对字符串进行预处理,并丢弃任何在格式良好的XML中不合法的字符,但是我对这个相对较大的问题一无所知。
相对较大的问题是:这些数据首先在那里做什么?(假设)人类可读数据字段中间的不可见ASCII字符有什么作用(如果有的话)?为什么生成这个字符串的Perl脚本在遇到非法字符时没有失败?
我敢打赌一美元,这是因为编写该脚本的人使用的是字符串操作,而不是XML库来生成XML文档。这就是为什么,正如我多次说过的那样,您永远不应该使用字符串操作来生成XML。(当然也有例外。例如,如果您正在编写一次性应用程序或XML解析器。或者你的名字是Tim Bray。)
发布于 2011-02-16 20:04:30
必须使用正确的编码创建XmlReader/TextReader。您可以按如下方式创建它,并将其传递给Dataaset:
StreamReader reader = new StreamReader("myfile.xml",Encoding.ASCII); // or correct encoding
myDataset.ReadXml(reader);https://stackoverflow.com/questions/5016127
复制相似问题