Ошибка SAX: несовместимые типы: строка не может быть преобразована в InputSource
Соответствующий код; Barfs на создание экземпляра SAXSource
:
TransformerFactory factory = TransformerFactory.newInstance();
XMLReader xmlReader = XMLReaderFactory.createXMLReader("org.ccil.cowan.tagsoup.Parser");
Source input = new SAXSource(xmlReader, "http://books.toscrape.com/");
Result output = new StreamResult(System.out);
factory.newTransformer().transform(input, output);
JavaDoc говорит:
public SAXSource(XMLReader reader,
InputSource inputSource)
Создайте SAXSource, используя XMLReader и SAX InputSource. Transformer или SAXTransformerFactory установят себя как ContentHandler читателя, а затем вызовут reader.parse(inputSource).
Смотря на InputSource
показывает:
InputSource(InputStream byteStream)
Create a new input source with a byte stream.
InputSource(Reader characterStream)
Create a new input source with a character stream.
Так что это повлечет за собой, например, поток символов для чтения в html
для InputStream
??
Было бы tagsoup
лучше использовать для этого преобразования личности? Но как?
2 ответа
Существует конструктор https://docs.oracle.com/javase/8/docs/api/org/xml/sax/InputSource.html, который принимает системный идентификатор, например URL, чтобы вы могли можешь использовать Source input = new SAXSource(xmlReader, new InputSource("http://books.toscrape.com/"));
,
Вы можете получить доступ к InputStream, который читает из ресурса за URL-адресом, например так:
InputStream i = new URL("http://...").openConnection().getInputStream();
Тогда вы можете использовать i
для тебя SAXSource
,