Ошибка SAX: несовместимые типы: строка не может быть преобразована в InputSource - PullRequest
0 голосов
/ 04 января 2019

соответствующий код; 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's скажем :

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 ]

0 голосов
/ 04 января 2019

Существует конструктор https://docs.oracle.com/javase/8/docs/api/org/xml/sax/InputSource.html#InputSource-java.lang.String-, который принимает системный идентификатор, например URL, чтобы вы могли использовать Source input = new SAXSource(xmlReader, new InputSource("http://books.toscrape.com/"));.

0 голосов
/ 04 января 2019

Вы можете получить доступ к InputStream, который читает из ресурса за URL-адресом, как это:

InputStream i = new URL("http://...").openConnection().getInputStream();

Тогда вы можете использовать i для вашего SAXSource.

...