XSLT Transform screws up
tags

2019-10-18 11:29发布

我试图做一个XSLT转换(服务器端,使用PHP),我想XHTML作为转换的输出,因为它是一个XHTML页面的一部分。 如果我使用

    <xsl:output method="html" /> 

它生成的代码是有效的HTML代码,但是具有BR代码(无/),所以它不会是有效的XHTML;

如果我使用

    <xsl:output method="xml" /> 

这里来的荒诞:输出确实有BR /标签,以及IS正确的XML,但是当我把它放到页面属于,一些结束标记消失,没有明显的原因。

这里的XSL文件http://hbxplayer.sf.net/test/mobile.xsl (这是一个有点长,在这里将其粘贴)

,做转型的PHP是这样的:

    ob_start();
    include 'presetList_xml.php';
    $xml=ob_get_clean();
    $xsl=file_get_contents("mobile.xsl");
    $xslt=new XSLTProcessor();
    $xslt->importStyleSheet(new SimpleXMLElement($xsl));
    echo $xslt->transformToXml(new SimpleXMLElement($xml));

加载输出的JS是这样的:

    function loadPresetList(){
        var listArea=document.getElementById("presetsArea");
        var xmlhttp=new XMLHttpRequest();
        xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState==4){
                if(xmlhttp.status==200||xmlhttp.status==0){
                        listArea.innerHTML=xmlhttp.responseText;
                }else{ //ERROR, TRY AGAIN
                        listArea.innerHTML="Error. Retrying...";
                        loadPresetList();
                }
            }
        }
        xmlhttp.open("GET","presets_transformer.php?type=mobile&r="+Math.random(),true);
        xmlhttp.send();
    }

没有什么太特别的,你可以看到; 但它是使用XSLT所以我可能做错了什么我的第一次。

提前致谢 :)

编辑:把每个元素围绕一个div似乎解决了这个问题。 为什么? 我不知道。 静像:第一标记开始终缺少结束标记

Answer 1:

那么,如果你想使用XSLT 1.0处理器的话,通常只支持两种输出方式html生成HTML 4将担任text/html或输出方法xml生成XML或XHTML与一个XML的MIME类型等提供application/xml或与XHTML MIME类型提供application/xhtml+xml 。 然而旧的IE版本(包括IE 8)不支持XHTML担任application/xhtml+xml 。 和innerHTML已知与XHTML的问题为好,特别是在旧的浏览器。

XSLT 2.0有一个输出方法xhtml生成可作为良好的XHTML text/html和你要处理的XHTML将被发送到旧的浏览器,这将是我认为正确的选择。

既然你使用PHP只支持XSLT 1.0和使用innerHTML我强烈建议有XSLT样式表创建HTML 4或HTML 5,避免XHTML。



文章来源: XSLT Transform screws up
tags