SAXParseException при использовании JAXB с HTML - PullRequest
0 голосов
/ 18 января 2019

Насколько я помню, есть возможность настроить синтаксический анализатор xml на использование tagsoup, но я не могу вспомнить синтаксис. С помощью JAXB я ищу очистить некоторые неприятные html, если это возможно.

пытается маршаллировать:

package my.books;

import java.io.File;
import java.io.FileInputStream;
import java.net.URI;
import java.util.Properties;
import java.util.logging.Logger;
import javax.xml.bind.JAXB;
import javax.xml.transform.stream.StreamSource;
import org.xml.sax.XMLReader;

public class App {

    private static final Logger LOG = Logger.getLogger(App.class.getName());
    private Properties properties = new Properties();

    public static void main(String[] args) throws Exception {
        new App().htmlToXhtml();
    }

    private void htmlToXhtml() throws Exception {
        properties.loadFromXML(App.class.getResourceAsStream("/properties.xml"));
        LOG.info(properties.toString());
        URI inputURI = new URI(properties.getProperty("html_input"));
        File htmlInputFile = new File(inputURI);

        FileInputStream fileInputStream = new FileInputStream(htmlInputFile);
        StreamSource streamSource = new StreamSource();
        streamSource.setInputStream(fileInputStream);

        XMLReader xmlReader = new org.ccil.cowan.tagsoup.Parser();  //but it's html, not xml...

        Foo foo = JAXB.unmarshal(streamSource, Foo.class);  //foo is ...?
    }

}

The org.xml.sax.SAXParseException и связанные с ним:

thufir@dur:~/NetBeansProjects/books$ 
thufir@dur:~/NetBeansProjects/books$ gradle clean run

> Task :run FAILED
Jan 17, 2019 9:15:47 PM my.books.App htmlToXhtml
INFO: {output=file:/home/thufir/xml/output.xml, basex_path=file:/home/thufir/.basex/, html_input=file:/home/thufir/xml/wget/index.html}
Exception in thread "main" javax.xml.bind.DataBindingException: javax.xml.bind.UnmarshalException
 - with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 665; columnNumber: 191; The element type "img" must be terminated by the matching end-tag "</img>".]
        at javax.xml.bind.JAXB.unmarshal(JAXB.java:262)
        at my.books.App.htmlToXhtml(App.java:33)
        at my.books.App.main(App.java:18)
Caused by: javax.xml.bind.UnmarshalException

Этого нельзя сделать с JAXB, потому что это произвольно html, а не xml, как ожидается?

Я забыл о s9api как:

https://stackoverflow.com/a/6787473/262852


на самом деле, выглядит так, как можно с отражением. Я удивлен, что это не библиотека, честно говоря. Или, если это не библиотека, возможно, я выдумываю свой собственный путь, но не в хорошем смысле. (Очевидно, что по крайней мере еще у одного человека был такой же вопрос, как и у меня.)

Основной полезный фрагмент кода, который я собираюсь предоставить, состоит в том, чтобы разархивировать XML данные через JAXB отражательно. Причина, по которой я хотел сделать это что я не всегда могу знать конкретный объект XML, я буду десериализация. Кроме того, потому что я ленивый и мне все равно или хочу знать, каковы внутренние детали документа XML:).

...