如何将JAXB与HTML一起使用



我想使用JAXB将一些讨厌的HTML解编组为Java对象。(我使用Java 7)。

Tagsoup是一个符合sax的XML解析器,可以处理讨厌的HTML。

如何设置JAXB以使用Tagsoup解组HTML?

我尝试设置System.setProperty("org.xml.sax。司机"、"org.ccil.cowan.tagsoup.Parser");

如果我创建一个XMLReader,它将使用Tagsoup,但当我使用JAXB时则不使用Tagsoup。

  1. com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl使用DOM或SAX来解析XML吗?

  2. 我如何告诉JAXB使用SAX?

  3. 我如何告诉JAXB使用TagSoup作为它的SAX实现?

根据Blaise的建议,在下面尝试,但在最后一行得到SAXParseException。当只使用XMLReader完成解析时,解析很好:

    JAXBContext jaxbContext = JAXBContext.newInstance(Thing.class);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    XMLReader xmlReader = new org.ccil.cowan.tagsoup.Parser();
    xmlReader.parse("file:///c:/test.xml");
    System.out.println("parse ok");
    xmlReader.setContentHandler(unmarshaller.getUnmarshallerHandler());
    //SAXParseException; systemId: file:/c:/test.xml; lineNumber: 5; columnNumber: 3; The element type "br" must be terminated by the matching end-tag "</br>".
    Thing thing = (Thing) unmarshaller.unmarshal(new File("c:/test.xml"));

您可以从Unmarshaller获得UnmarshallerHandler,并将其设置为SAX解析器上的ContentHandler。完成SAX解析后,从UnmarshallerHandler获取对象。

UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler();
xmlReader.setContentHandler(unmarshallerHandler);
xmlReader.parse(...);
Thing thing = (Thing) unmarshallerHandler.getResult();

我的博客上有一个这样的例子:

  • http://blog.bdoughan.com/2011/05/jaxb-and-dtd.html

相关内容

  • 没有找到相关文章

最新更新