Я использую реализацию Xerces в JDK6 для выполнения запросов XPath к переходному документу HTML 4.0. Со следующим кодом:
XPath newXPath = XPathFactory.newInstance().newXPath();
XPathExpression xpathExpr = newXPath.compile(expression);
Object xPathResult = xpathExpr.evaluate(inputSource, XPathConstants.NODESET);
Где inputSource
построен из FileInputStream
, я получаю исключение:
Caused by: org.xml.sax.SAXParseException: The entity "mdash" was referenced, but not declared.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:291)
Это сообщение также выводится на стандартный вывод:
[Fatal Error] :20:43: The entity "mdash" was referenced, but not declared.
Как мне избежать этого исключения?
Файл HTML создается из преобразования XSLT из XML. Я не думаю, что это обязательно должно быть —
, я не уверен. HTML-код должен отображаться в приложении Java Swing.
Мне трудно судить, какая информация из моей конкретной реализации имеет отношение к этой проблеме. Пожалуйста, дайте мне знать по комментариям, если требуется дополнительная информация.
Итак, у меня сложилось неправильное представление о том, что HTML - это XML (результат того, что я вообще об этом не думал).
Итак, учитывая файл HTML, как мне решить эту проблему?
- Предоставление парсеру DTD для HTML 4?
- Заменить
—
на эквивалентный. HTML создается из преобразования XSLT. Можно ли установить таблицу стилей для замены mdash эквивалентным числовым символом?
- Существуют ли какие-либо библиотеки, которые исправили бы HTML-код перед его передачей парсеру? Я заметил, что JTidy упоминается для подобных целей.