HTML5草案 specifies(至少目前),关于:legacy-compat的URI可以用于依赖于符合XML的doctype(!DOCTYPE html不是)的文档. 所以我碰巧有一堆HTML5验证XML文件,它们以: !DOCTYPE html SYSTEM "about:legacy-compat" 不
所以我碰巧有一堆HTML5验证XML文件,它们以:
<!DOCTYPE html SYSTEM "about:legacy-compat">
不幸的是,当我将这样的XHTML5文档与Xalan或Saxon等任何XSLT处理器一起使用时,他们自然会尝试解析(不可解析的)URI.
有没有办法让他们忽略URI或者在引擎盖下进行虚假解决?解决它的尝试发生在这些文档的早期,所以例如Saxon的-dtd:off开关在这里没有效果.
编辑:低级方法sed -n’2,$p’< htmlfile> |不幸的是,otherapp只有在我开始使用document()XPath函数加载另一个XHTML5文件之后才能工作.
编辑2:我玩了XML catalogs并让他们与Saxon和Xalan一起工作.但是,我总是得到一个
java.net.MalformedURLException: unknown protocol: about
嗯,这并不奇怪,但我怎么能绕过这个呢?永远不应该解析URL,只是扔掉.
将此Java文件放入$somepath / foo / about /package foo.about; import java.io.IOException; import java.io.InputStream; import java.io.StringBufferInputStream; import java.net.URL; import java.net.URLConnection; public class Handler extends java.net.URLStreamHandler { @Override protected URLConnection openConnection(URL url) throws IOException { URLConnection res = new URLConnection(url) { @Override public void connect() throws IOException { connected = true; } @Override public InputStream getInputStream() throws IOException { return new StringBufferInputStream("<!ELEMENT html ANY>"); } }; return res; } }
现在进入$somepath并编译它:
javac foo/about/Handler.java
调用Saxon时,将以下参数添加到JVM:
-Djava.protocol.handler.pkgs=foo -cp"$somepath"
这是一个修改过的shell脚本脚本(适用于* nix系统,但它与Windows非常相似):
#!/bin/sh exec java -Djava.protocol.handler.pkgs=foo -classpath /usr/share/java/saxonb.jar:"$somepath" net.sf.saxon.Transform "$@"
如果它不起作用,您可能希望使用本地saxonb-xslt脚本进行调整.