2014-01-10 74 views
0

我使用XMLDogsniff()方法时有此异常org.xml.sax.SAXParseException;内容是不允许在序言

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 39; Content is not allowed in prolog. 
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) 
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) 
    at jlibs.xml.sax.dog.XMLDog.sniff(XMLDog.java:188) 

我的Java代码是

String xml = "..." 
XPathResults results = xmlDog.sniff(new InputSource(new StringInputStream(xml))); 

,你可以看到我有我的XML字符串,所以使用UTF-8 BOF没有问题,我也敢肯定,有没有空格在xml串...

+0

可能在那里有一个ByteStream,并且当字符串被解码时以及字节流稍后会得到不同的字符编码重新编码。 – clacke

+0

更正:InputStream *是一个字节流,所以肯定会有编码问题。 – clacke

+0

参见http://stackoverflow.com/questions/5138696/org-xml-sax-saxparseexception-content-is-not-allowed-in-prolog – Raedwald

回答

0

我后来发现的原因是,我使用StringInputStream类并没有意识到,它是org.hsqldb.lib.StringInputStream.StringInputStream(String)

当我更换了这一个与

  • java.io.StringBufferInputStream.StringBufferInputStream(String) //弃用
  • java.io.StringReader.StringReader(String) //嗅接受读者太
  • java.io.ByteArrayInputStream.ByteArrayInputStream(byte[])

...它的工作。我没有调查为什么从hsqldb包的前一个在这种情况下是不好的...

相关问题