撒克逊人:无法在.NET中使用架构打开XML,在Java中工作正常

时间:2018-06-25 14:13:54

标签: java xml xpath schema saxon

我正在尝试创建一个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.xmlhttp://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,但是我们在所有地方都使用了该类,而没有任何其他问题。

1 个答案:

答案 0 :(得分:1)

“ Prolog中不允许内容”异常是绝对令人生气的-如果仅告诉您它抱怨的字节是什么!一种诊断技术是显示InputStream传递的初始字节:对

进行一些调用
System.err.println(schemaFile.next())

我对原因的第一个猜测是与字节顺序标记有关,而不是推测,我将重点放在诊断上,以查看解析器在InputStream中看到的它不喜欢的东西。