Насколько я помню, есть возможность настроить синтаксический анализатор 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:).