2016-08-21 9 views
1

Я хочу, чтобы разобрать некоторые Html строку org.w3c.dom.Document, я использую этот метод:Java XML-парсер Исключение: Конечный тег для элемента типа «седловины» должен заканчиваться символом «>» Разделитель

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 tag корректен, и я не знаю, как решить эту проблему.

ответ

2

Проблема в том, что 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 против HTML

Btw. Если вы действительно хотите проанализировать HTML, вы можете использовать сторонние библиотеки, такие как https://jsoup.org/ или http://htmlcleaner.sourceforge.net/