Есть большая вероятность, что поток был проанализирован правильно, просто потому, что
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).