我在JDK6中使用Xerces實現在HTML 4.0過渡文檔上執行XPath查詢。用下面的代碼:如何在HTML文件包含mdash時使用Xerces避免SAXParseException?
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文件是從XML的XSLT轉換中創建的。我不認爲我需要它是一個—
,我不確定。 HTML將顯示在Java Swing應用程序中。
我很難判斷我的具體實施中的哪些信息與此問題相關。如果需要更多信息,請通過評論告訴我。因此,我認爲HTML是XML(根本就沒有想到這一點)的錯誤觀念。
因此,給定一個HTML文件,我該如何解決這個問題?
- 給解析器提供HTML 4的DTD嗎?
- 用等價物替代
—
。 HTML是通過XSLT轉換創建的,可以將樣式表設置爲使用等效數字符號替換mdash嗎? - 是否有任何庫在將HTML提供給解析器之前將其修復?我注意到JTidy出於類似的目的而被提及。
太糟糕了,我看到這有點晚了。是的,這也是一個適當和正確的解決方案。如果您可以生成「乾淨」的XML,則不需要JTidy。 – 2009-11-27 15:35:55