我正在尝试创建一个Saxon XPathCompiler。我在Java&.NET中具有相同的代码,每个代码都调用相应的Saxon库。代码是:
protected void ctor(InputStream xmlData, InputStream schemaFile, boolean preserveWhiteSpace) throws SAXException, SchemaException, SaxonApiException {
this.rootNode = makeDataSourceNode(null);
XMLReader reader = XMLReaderFactory.createXMLReader();
InputSource xmlSource = new InputSource(xmlData);
SAXSource saxSource = new SAXSource(reader, xmlSource);
Source schemaSource = new StreamSource(schemaFile);
Configuration config = createEnterpriseConfiguration();
config.addSchemaSource(schemaSource);
// ...
对于.NET,InputStreams是一个类,它包装.NET Stream并将其变为Java InputStream。对于Java,上述代码可以正常工作。但是在.NET中,最后一行config.addSchemaSource(schemaSource)抛出:
$ exception {“ prolog。”} org.xml.sax.SAXParseException
在Java和.NET中,如果没有架构,它都可以正常工作。
其使用的文件是http://www.thielen.com/test/SouthWind.xml和http://www.thielen.com/test/SouthWind.xsd
It does not appear to be any of the issues in this question.如果这是问题所在,那么Java和.NET不应有相同的问题。
我在想,也许它是.NET Stream的包装,使其成为Java InputStream,但是我们在所有地方都使用了该类,而没有任何其他问题。
答案 0 :(得分:1)
“ Prolog中不允许内容”异常是绝对令人生气的-如果仅告诉您它抱怨的字节是什么!一种诊断技术是显示InputStream传递的初始字节:对
进行一些调用System.err.println(schemaFile.next())
我对原因的第一个猜测是与字节顺序标记有关,而不是推测,我将重点放在诊断上,以查看解析器在InputStream中看到的它不喜欢的东西。