Исключение синтаксического анализатора Java xml: конечный тег для типа элемента "col" должен заканчиваться разделителем '>'
Я хочу разобрать некоторую строку HTML в org.w3c.dom.Document, я использую этот метод:
public static Document stringToDocument(String input){
try {
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(input));
Document doc = db.parse(is);
return doc;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
это нормально работает на большинстве html, за исключением того, что строка html имеет теги "colgroup" и "col" (как показано ниже)
<html dir="rtl"><head><meta charset="utf-8"/></head>
<body>
<table>
<colgroup>
<col width="29">
<col style="width:54pt" span="4" width="72">
<col width="4">
</colgroup>
<tbody>
<tr>
<td>test</td>
<td>105</td>
<td>110</td>
</tr>
<tr>
<td>456</td>
<td>456</td>
<td>786</td>
</tr>
</tbody>
</table>
</body>
</html>
Исключение выдается методом:
org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 6; The end-tag for element type "col" must end with a '>' delimiter.
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
Согласно w3schools, синтаксис тега col правильный, и я не знаю, как решить эту проблему.
1 ответ
Проблема в том, что HTML не в формате XML. Смотрите здесь http://courses.cs.vt.edu/~cs1204/XML/htmlVxml.html или здесь http://www.xmlobjective.com/what-is-the-difference-between-xml-and-html/ или здесь https://webkit.org/blog/68/understanding-html-xml-and-xhtml/ или используйте вашу любимую поисковую систему и ищите: xml vs html
Btw. Если вы действительно хотите анализировать HTML, вы можете использовать сторонние библиотеки, такие как https://jsoup.org/ или http://htmlcleaner.sourceforge.net/