【问题标题】:How to parse and find the node in which the invalid characters are present in xml?如何解析并找到xml中存在无效字符的节点?
【发布时间】:2011-05-02 09:33:19
【问题描述】:

我的 xml 节点中有一些无效字符,例如 11 (U+000) 或垂直制表符。当我尝试将此 xml 插入 Oracle 时,出现如下异常:

ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00217: invalid character 11 (U+000

因此我需要解析 xml 并检测哪个节点包含此无效字符并将其包装在 cdata 部分中。

【问题讨论】:

  • 如果里面有无效字符,那就是not XML,不能这样对待。你需要先把它清理干净。
  • 我们在使用 cms 时,编辑不小心复制了一些已被 cms 转换为 xml 的非法字符。所以只有在那之后,我们需要解析这个xml并将数据包装在cdata中。
  • CDATA 不允许您包含 the spec 不允许的字符。

标签: xml ora-31011


【解决方案1】:

如果您可以在文件中操作 XML,则 vi 之类的编辑器在查找和删除嵌入的控制字符方面非常有用。我刚刚处理了一个从 mySQL 导出的 200MB XML 文件,其中包含四个嵌入的 Ctrl-K (U+000B) 字符。使用 vi 编辑文件并使用 :%s/^K//g 让我可以快速删除它们并继续前进。 (注意:如果您不习惯使用 vi,则上面命令中的 ^K 是通过按 Ctrl-V 然后按 Ctrl-K 生成的。不要只输入 carat (^) 然后 K - 这不起作用。 ) 如果您使用的是 Windows(就像我一样),Cygwin 是一组非常方便的实用程序,其中包括 vi。

【讨论】:

    【解决方案2】:

    在将 XML 数据插入 Oracle 之前,您是否能够使用任何编程语言?您可以使用 XmlConvert.IsXmlChar Method 来检查所有字符是否都是 XML 有效的

    C# 示例:

    public static bool CheckValidXmlChars(string content)
    {
       return content.All(ch => System.Xml.XmlConvert.IsXmlChar(ch));
    }
    

    .Net Fiddle - https://dotnetfiddle.net/v1TNus

    【讨论】:

      猜你喜欢
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      相关资源
      最近更新 更多