DocumentBuilder.parse (InputStream) возвращает ноль - PullRequest
24 голосов
/ 07 января 2010

Я исправляю ошибку в существующем коде, касающемся DocumentBuilder.parse. У меня есть следующий код:

 String theOutput;
    theOutput = response.encodeURL(prefix + "/include/sampleForConversion.jsp?" + request.getQueryString();
    StreamSource xmlSource = new StreamSource(new URL(theOutput).openStream(), "http://sampleApps.net/static/dataDef1.1.dtd");                                         
    Document xmlDoc = dBuilder.parse(xmlSource.getInputStream());

Я не понимаю, почему я получаю нулевое значение для xmlDoc, хотя у меня есть допустимые значения переменных theOutput и xmlSource. Пожалуйста помоги.

спасибо!

1 Ответ

45 голосов
/ 07 января 2010

Есть большая вероятность, что поток был проанализирован правильно, просто потому, что xmlDoc.toString() всегда будет "[#document: null]". Это не означает, что дерево DOM пусто. Сначала проверьте, есть ли в документе несколько узлов (дочерних).

Если бы DOM действительно был пуст, то я сначала напечатал бы содержимое потока ввода на консоль (возможно, xmlSource.getInputStream().toString() уже возвращает содержимое), чтобы проверить, правильно ли содержимое сформировано, дважды проверьте, если Файл dtd был доступен (браузер) и, наконец, выгрузите XML-документ и dtd в файлы, чтобы проверить, является ли содержимое XML действительным.

Ах, подождите секунду, я думал, что вторым параметром был URI файла DTD, но строка - это systemId документа xml (public StreamSource(InputStream inputStream, String systemId)). Возможно, это проблема - класс StreamSource будет использовать этот URI для разрешения относительных URI (например, вашего DTD).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...