SAX错误:类型不兼容:字符串无法转换为InputSource

时间:2019-01-04 15:29:33

标签: java xml xslt saxon tag-soup

相关代码;实例化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的say

public SAXSource(XMLReader reader,
         InputSource inputSource)
  

使用XMLReader和SAX InputSource创建一个SAXSource。的   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.

因此,对于example,这需要从html中读取InputStream的字符流?

tagsoup最好用于this身份转换吗?但是,如何?

2 个答案:

答案 0 :(得分:2)

有一个构造函数https://docs.oracle.com/javase/8/docs/api/org/xml/sax/InputSource.html#InputSource-java.lang.String-,它带有一个系统ID,例如URL,以便您可以使用Source input = new SAXSource(xmlReader, new InputSource("http://books.toscrape.com/"));

答案 1 :(得分:1)

您可以访问如下所示的InputStream,该InputStream从URL后面的资源读取:

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

然后,您可以将i用于SAXSource