我正在使用 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 之间,有一个 US 分隔符,粘贴到这里时实际上显示一个空格。所以我想知道如何在 XML 字符串中忽略它?
最佳答案
如果你看section 2.2 of the XML recommendation ,您将看到 x01F 不在 XML 文档允许的字符范围内。因此,虽然您正在查看的字符串对您来说可能看起来像 XML 文档,但它并不是一个。
你有两个问题。相对较小的一个是如何处理这个文档。我可能会预处理字符串并丢弃在格式良好的 XML 中不合法的任何字符,但随后我对相对较大的问题一无所知。
相对较大的问题是:这些数据首先在那里做什么? (大概)人类可读的数据字段中间的不可见 ASCII 字符有何用途(如果有)?为什么生成此字符串的 Perl 脚本在遇到非法字符时不会失败?
我敢跟你赌一美元,这是因为编写该脚本的人使用字符串操作而不是 XML 库来发出 XML 文档。这就是为什么,正如我一再说过的,您不应该使用字符串操作来生成 XML。 (当然也有异常(exception)。例如,如果您正在编写一次性应用程序或 XML 解析器。或者如果您的名字是 Tim Bray。)
关于c# - 读取包含无效字符的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5016127/