gpt4 book ai didi

java - 应用 XSLT 时访问 w3.org 时出错

转载 作者:行者123 更新时间:2023-12-04 06:58:35 26 4
gpt4 key购买 nike

我正在将 xslt 应用于 HTML 文件(已经过滤和整理以使其可解析为 XML)。

我的代码如下所示:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
this.xslt = transformerFactory.newTransformer(xsltSource);
xslt.transform(sanitizedXHTML, result);

但是,对于像这样找到的每个 doctype,我都会收到错误:

ERROR: 'Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/html4/loose.dtd'



我从浏览器访问 dtds 没有问题。

我对正在解析的 HTML 几乎没有控制权,并且不能撕掉 DOCTYPE,因为我需要它们作为实体。

欢迎任何帮助。

编辑:

我试图像这样禁用 DTD 验证:
private Source getSource(StreamSource sanitizedXHTML) throws ParsingException {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(false);
spf.setValidating(false); // Turn off validation

XMLReader rdr;

try {
rdr = spf.newSAXParser().getXMLReader();
} catch (SAXException e) {
throw new ParsingException(e);
} catch (ParserConfigurationException e) {
throw new ParsingException(e);
}

InputSource inputSrc = new InputSource(sanitizedXHTML.getInputStream());
return new SAXSource(rdr, inputSrc);
}

然后只是调用它...
    Source source = getSource(sanitizedXHTML);
xslt.transform(source, result);

错误仍然存​​在。

编辑 2:

编写了一个实体解析器,并在我的本地磁盘上获得了 HTML 4.01 过渡 DTD。但是,我现在收到此错误:

ERROR: 'The declaration for the entity "HTML.Version" must end with '>'.'



DTD 原样,从 w3.org 下载

最佳答案

我在 answer 中有一些建议到一个相关的问题。

特别是,在解析 XML 文档时,您可能希望关闭 DTD 验证,以防止解析器尝试获取 DTD。或者,您可以使用自己的实体解析器返回 DTD 的本地副本,而不是通过网络获取它。

编辑:只需调用setValidating(false)在 SAX Parser Factory 上可能不足以阻止解析器加载外部 DTD。解析器可能需要 DTD 用于其他目的,例如实体定义。 (也许您可以更改您的 HTML 清理/预处理阶段,以将所有实体引用替换为等效的数字字符实体引用,从而消除对 DTD 的需要?)

我不认为有 standard SAX feature flag这将确保完全禁用外部 DTD 加载,因此您可能必须使用特定于解析器的东西。因此,例如,如果您使用 Xerces,您可能需要查找 Xerces-specific features并调用setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false)只是要确定。

关于java - 应用 XSLT 时访问 w3.org 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com