如何在XSL函数'document()'中禁用DTD验证(xalan-j)

时间:2013-02-08 10:19:36

标签: java xslt dtd xalan

XSL:

<?xml version='1.0' encoding='utf-8' ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:htm="http://www.w3.org/1999/xhtml" version="1.0">
<xsl:template match="/">
        <xsl:variable name="source" select="document('test.html')"/>
</xsl:template>
</xsl:stylesheet>

的test.html:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-us" xml:lang="en-us">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
Bla-Bla-bla
</body>
</html>

当test.html包含DOCTYPE声明时,XSL转换大约需要2分钟。 当我在test.html中删除DOCTYPE声明时,XSL转换大约需要100毫秒。 在xalan-j中是否有办法通过XSL document()函数禁用内部加载XML的DTD验证。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您无需禁用验证。您需要安装本地缓存代理或目录以及最常用的DTD的本地副本。

这个过程需要很长时间,因为W3C serves DTD files very slowly是一种阻止过多DTD流量的方法。

使用本地目录,或使用本地缓存代理。