1

我正在尝试将可能很大的 xml 块从 C# 客户端发布到 GAEJ 应用程序,然后将其解析为 DOM 文档。

我已经设法让documentbuilder通过将请求数据解析为字符串然后对其进行修剪来解析xml,如下所示:

        String xml;
        BufferedReader rdr = req.getReader();
        String line;
        StringBuilder result = new StringBuilder();
        while ((line = rdr.readLine()) != null) {
            result.append(line);
        }
        xml = result.toString();
        db = dbf.newDocumentBuilder();
        Document doc = db.parse(new InputSource(new StringReader(xml.trim())));

然而,GAEJ 应用程序应该尽可能高效,并且将潜在的大 xml 输入逐行读取到字符串中,而不是将源流提供给解析器,这似乎很糟糕。我希望以下工作:

        Document doc = db.parse(request.getInputStream());

但后来我总是得到“org.xml.sax.SAXParseException: Content is not allowed in trailing section。” 如果我将 request.getInputStream() 调用的内容转储到控制台,我可以在最后一个结束标记之后看到一些框字符,但我不确定它们是如何到达那里的(客户端使用 UTF-8 编码),或如何从输入流中删除它们。谢谢!

4