【问题标题】:Java XMLReader getting SAXParseException on special characters in XMLJava XMLReader 在 XML 中的特殊字符上获取 SAXParseException
【发布时间】:2023-04-08 12:49:02
【问题描述】:

我在解析包含元素属性中的特殊字符(如“、”或 &得到一大堆文件。知道我能做什么吗??

最好的!

【问题讨论】:

    标签: java xml sax


    【解决方案1】:

    这不是 XML。不要称它为 XML,因为你在误导自己。您正在处理专有的数据语法,并且错过了使用 XML 进行数据交换的所有好处。您不能使用任何现有的处理 XML 的出色工具,因为您的数据不是 XML。您正处于 XML 发明之前存在的数据交换的黑暗时代,每个人都必须编写自己的解析器并将它们移植到多个平台,而且成本很高。从这种混乱状态切换到开放标准的现代世界可能会很昂贵,但投资将很快得到回报。只是不要让任何利益相关者自欺欺人地认为,因为您的语法“几乎是 XML”,因此您几乎可以从中获益。 XML 要么全有,要么全无。

    【讨论】:

    • 你不会说这是 JSON 的好处之一。这一切都是比 XML 低得多的障碍。
    • JSON 对于允许和不允许的内容同样严格。不同之处在于每个 JSON 解析器都以不同的方式放宽规则。因此,这取决于您是在一个规则清晰且强制执行的世界中更自在,还是在规则清晰但有时您可以逃脱惩罚的世界中更自在。
    【解决方案2】:

    它是not best practice,但您可以在使用 XMLReader 打开之前使用正则表达式将几乎 XML 转换为正确的 XML。沿着这些思路(仅使用 javascript 进行快速概念验证):

    var xml = '<root><node attr="bad attr chars...<"&>..."/></root>';
    xml = xml.replace(/("[^"]*)&([^"]*")/, '$1&amp;$2')
    xml = xml.replace(/("[^"]*)<([^"]*")/, '$1&lt;$2')
    xml = xml.replace(/("[^"]*)>([^"]*")/, '$1&gt;$2')
    xml = xml.replace(/("[^"]*)"([^"]*")/, '$1&quot;$2')
    alert(xml);
    

    【讨论】:

      【解决方案3】:

      您必须更改 XML 以使其格式正确。这五个魔术字符必须正确编码或包装在 CDATA 部分中,以告知解析器允许它们通过。

      如果五个魔术字符未正确编码,则您不会收到格式正确的 XML。这应该是您与用户签订合同的基础。

      进行一次性更改。

      【讨论】:

      • 嗯,我正在考虑那个,但是我的程序需要很多自动化:-(
      • 如果您没有正确的 XML,自动化就毫无意义。现在你不知道 - 其余的有什么关系?
      • 嗯,我认为你是对的......很难接受,因为这对我来说意味着更多的工作。
      猜你喜欢
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多