首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析xml时的SAXParseException

解析xml时的SAXParseException
EN

Stack Overflow用户
提问于 2014-05-01 14:16:49
回答 2查看 228关注 0票数 0
代码语言:javascript
复制
    foundation.NSPropertyListSerialization$_XML$DictionaryParser.fatalError- Parse fatal error : 
org.xml.sax.SAXParseException: Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1476)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1037)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:647)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:513)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:815)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:744)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:128)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1208)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:543)
    at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)

此问题有多个答案- Content is not allowed in Prolog SAXParserExceptionJava parsing XML document gives "Content not allowed in prolog." error

我不能解决这个错误,尽管参考了所有可能的帖子。我还尝试了这里推荐的解决方案-- http://www.rgagnon.com/javadetails/java-handle-utf8-file-with-bom.html

我综合了两个答案,然后做了这个-

代码语言:javascript
复制
String inputBytesToStr = new String(inputBytes);
if (inputBytesToStr.startsWith("\uFEFF")) {
            inputBytesToStr = inputBytesToStr.substring(1);             
        }
        inputBytesToStr = inputBytesToStr.trim().replaceFirst("^([\\W]+)<","<");
        inputBytesToStr = inputBytesToStr.replaceAll("[^\\x20-\\x7e\\x0A]", "");

下面是我的xml

代码语言:javascript
复制
    <?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<info>
    <key>Name</key>
    <string>Patrick</string>
    <key>Country</key>
    <string>Australia</string>
    <array>
        <string>myImageOne.jpeg</string>
        <string>myImageTwo.jpeg</string>
        <string>myImageOne.jpeg</string>
    </array>
</info>
</plist>

还是不走运。在过去的12个小时里,我一直在研究它。我现在就得解决这个问题。请帮帮我。

EN

回答 2

Stack Overflow用户

发布于 2014-05-01 15:22:13

考虑到这是标准的苹果.plist文件格式,您可能会更幸运地使用为plist文件设计的专用库,比如https://code.google.com/p/plist/,而不是试图手动解析它。

使用库还有一个好处,那就是它可以透明地处理二进制序列化格式和XML格式的plist文件-这两种格式都使用相同的文件扩展名,在尝试打开之前,您无法判断特定plist是哪种格式。

票数 0
EN

Stack Overflow用户

发布于 2017-05-26 06:53:49

我唯一幸运的是用dd-plist:https://github.com/3breadt/dd-plist解析plist,并且花了大量的时间尝试各种选项,我认为它值得一提。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23402995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档