当前位置 : 主页 > 网页制作 > xml >

xml – 如何在XSLT处理器中使用HTML5的“about:”协议

来源:互联网 收集:自由互联 发布时间:2021-06-13
HTML5草案 specifies(至少目前),关于:legacy-compat的URI可以用于依赖于符合XML的doctype(!DOCTYPE html不是)的文档. 所以我碰巧有一堆HTML5验证XML文件,它们以: !DOCTYPE html SYSTEM "about:legacy-compat" 不
HTML5草案 specifies(至少目前),关于:legacy-compat的URI可以用于依赖于符合XML的doctype(<!DOCTYPE html>不是)的文档.

所以我碰巧有一堆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脚本进行调整.

网友评论