2024 Clojure状态调查中分享您的想法!

欢迎!请查看关于页面了解更多有关此功能的信息。

0
data.xml

解析以BOM字节顺序标记字符开头的UTF-8编码文件将是个不错的选择,因为它将更好地支持野外的XML。

目前,我遇到的几个XML文件抛出“在prolog中不允许内容”异常
http://stackoverflow.com/questions/4569123/content-is-not-allowed-in-prolog-saxparserexception

4 个答案

0

评论者:bendlas

根据您在stackoverflow上的链接,这似乎与几个Java漏洞有关,这些漏洞被标记为wontfix,因为这涉及到现有工具的期望,并且票据中的推荐是应用程序自己处理BOM。

由于data.xml承诺从原始字节处理xml(因为它接受InputStreams),有选择权:要么放弃InputStream接口,并要求用户传递正确处理其输入的Readers(例如,https://commons.apache.org/proper/commons-io/javadocs/api-2.2/org/apache/commons/io/input/XmlStreamReader.html)或使用可执行此操作的Reader实现,当从流创建输入源时。

为了避免维护困难,有移除基于字节接口的诱惑,但是我愿意听取关于为什么data.xml应该处理这个问题的论点。

0

评论者:featheredtoast

这更多是一个建议 - 在了解了一些输入和输入流的知识之后,我可以理解为什么这可能超出范围。

我天真地认为通过clojure.java.io/reader处理输入可以正确解析XML文件,因为我直到遇到异常时才知道BOM问题。即使与BOM相关的JVM修复会破坏兼容性从而被拒绝,但如果一个底层的解析库能处理输入和#pragma removing BOM,那也会很有帮助。

至少考虑为那些不熟悉Java XML解析的人添加一个推荐读者列表。对于像我这样不熟悉BOM、读取器和XML的开发者来说,难以预见这类问题,尤其是在相同文件在其他语言中通过验证时。

0

评论者:bendlas

我只是暂时留下这些,当在文档中/更改此内容时,它可能是一个不错的参考:https://github.com/jimpil/clj-bom

0
参考: https://clojure.atlassian.net/browse/DXML-45 (由 alex+import 报告)
...