我想使用 JAXB 将一些讨厌的 HTML 解组为 Java 对象。(我在 Java 7 上)。
Tagsoup 是一个符合 SAX 的 XML 解析器,可以处理讨厌的 HTML。
如何设置 JAXB 以使用 Tagsoup 来解组 HTML?
我尝试设置 System.setProperty("org.xml.sax.driver", "org.ccil.cowan.tagsoup.Parser");
如果我创建一个 XMLReader,它会使用 Tagsoup,但在我使用 JAXB 时不会。
com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl 是否使用 DOM 或 SAX 来解析 XML?
如何告诉 JAXB 使用 SAX?
如何告诉 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"));