3

JAXB を使用して、厄介な HTML を Java オブジェクトにアンマーシャルしたいと考えています。(私はJava 7を使用しています)。

Tagsoup は、厄介な HTML を処理できる SAX 準拠の XML パーサーです。

HTML のアンマーシャリングに Tagsoup を使用するように JAXB を設定するにはどうすればよいですか?

System.setProperty("org.xml.sax.driver", "org.ccil.cowan.tagsoup.Parser"); を設定してみました。

XMLReader を作成すると、Tagsoup が使用されますが、JAXB を使用する場合は使用されません。

  1. com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl は、XML の解析に DOM または SAX を使用しますか?

  2. JAXB に SAX を使用するように指示するにはどうすればよいですか?

  3. TagSoup を SAX 実装として使用するように JAXB に指示するにはどうすればよいですか?

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"));
4

1 に答える 1