2013-02-08 18 views
2

XSL:如何XSL功能禁用DTD验证 '文件()'(的Xalan-J)

<?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 ms。 xalan-j中有没有一种方法可以通过XSL document()函数禁用DTD验证以便内部加载XML。

在此先感谢!

+1

我没有回答你的问题,但你可能想重新考虑试图禁用DTD处理,因为HTML可能包含在DTD中定义的实体(如' '),并且不是标准的XML。一个更好的问题可能就是如何阻止DTD处理这么久。 :) – JLRishe

+0

同意你,JLRishe。主要问题是如何提高性能。 – Dmitry

+0

为什么doctype在xml声明之后出现? – Sugar

回答

0

您不需要禁用验证。您需要安装本地高速缓存代理或最常用的DTD的目录和本地副本。

由于W3C serves DTD files very slowly作为阻止过多的DTD流量的一种方式,所以该过程需要很长时间。

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

+0

我试图使用本地目录但未成功 – Dmitry