我想写一个萨克斯parser for XHTML文件,我从网站下载.首先我有一个问题doctype宣言》(我发现了 在这里, 这是因为W3C有意阻止访问DTD),但我固定的,与:

XMLReader reader = parser.getXMLReader();
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);

然而,现在我遇到的第二个问题。SAX分析器会引发一个例外,当达到一些Javascript嵌入XHTML文件:

    <script type="text/javascript" language="JavaScript">
function checkForm() {
answer = true;
if (siw && siw.selectingSomething)
    answer = false;
    return answer;
}//
</script>

具体分析器会引发一个错误,一旦达到的&&'s,因为它期待实体参考。确切的例外是:

`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错误,避免实体参考的错误?

干杯,

皮特

有帮助吗?

解决方案

(X)HTML你是在试图分析不是有效的XML(否则你不会得到一萨克斯析错误)。而且,双符号("&&")证实了这一点。这意味着对其自己的,你不能使用利用一个普通的XML parser分析文件。

有可以使用的工具,例如 TagSoup, ,这将产生正当萨克斯事件(可以使用相同萨克斯/XML分析代码如前),但TagSoup会照顾映穷形成HTML事件的适当萨克斯/XML事件。

其他提示

我觉得你应该把脚本内容在CDATA部分,例如 http://www.w3schools.com/TAGS/tag_script.asp 给出了以下例子:

<script type="text/javascript"><![CDATA[
document.write("Hello World!")
//]]></script>

NekoHTML 可能会解决这个对你好的,你把它作为一个的。.

如果你使用萨克斯滤波器,可能还可以以插入 CDATA事件 之后你遇到一个startElement为 <script>, although that might be parser-dependent as not all parsers support the LexicalHandler功能.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top