WebからダウンロードしたXHTML文書用のSAXパーサーを作成しようとしています。最初に私は(私はW3Cが意図的にDTDへのアクセスをブロックしているので、それがあったことをhereから出た)DOCTYPE宣言に問題を抱えていたが、私はしていることを固定:しかしJava - XHTML文書のSAXパーサー
XMLReader reader = parser.getXMLReader();
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
、今私はよ2番目の問題が発生しました。それはXHTML文書に埋め込まれたいくつかのJavascriptを達したときにSAXパーサは例外をスロー:
<script type="text/javascript" language="JavaScript">
function checkForm() {
answer = true;
if (siw && siw.selectingSomething)
answer = false;
return answer;
}//
</script>
それは& &年代に達すると、それは実体参照を期待していますよう具体的パーサは、エラーがスローされます。正確な例外は次のとおりです。
`org.xml.sax.SAXParseException: The entity name must immediately follow the '&' in the entity reference.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:391)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1390)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEntityReference(XMLDocumentFragmentScannerImpl.java:1814)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3000)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:624)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:486)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:810)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:740)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:110)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1208)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:525)
at MLIAParser.readPage(MLIAParser.java:55)
at MLIAParser.main(MLIAParser.java:75)`
DTDを無効にしなかった場合、このエラーは発生しないと思われます(ただし、わかりません)。だから、どのようにしてDTDエラーを回避し、実体参照エラーを避けることができますか?
乾杯、
ピート
DTDを無効にする代わりに、ダウンロードして私のソフトウェアに組み込みリソースとして追加しました。パーザがそれを望むとき、私はそれをインターネットから取得するのではなく、ローカル/ダウンロード/キャッシュされたDTDのコピーに与えます。これはDTD処理を完全に無効にするよりも優れていると思います。 – ChrisW