Php XSLT转换出错<;br/>;标签

Php XSLT转换出错<;br/>;标签,php,javascript,html,xml,xslt,Php,Javascript,Html,Xml,Xslt,我正在尝试进行XSLT转换(服务器端,使用php),我希望XHTML作为转换的输出,因为它是XHTML页面的一部分。 如果我使用 加载输出的JS如下所示: function loadPresetList(){ var listArea=document.getElementById("presetsArea"); var xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=fun

我正在尝试进行XSLT转换(服务器端,使用php),我希望XHTML作为转换的输出,因为它是XHTML页面的一部分。 如果我使用

加载输出的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似乎可以解决这个问题。为什么?我不知道。不过:打开的第一个标记总是缺少结束标记。如果您想使用XSLT1.0处理器,那么它通常只支持输出方法
html
来生成html 4作为
text/html
或输出方法
xml
来生成xml或XHTML作为xml MIME类型,如
application/xml
或与XHTML MIME类型
application/XHTML+xml
一起使用。但是,旧的IE版本(包括IE 8)不支持将XHTML用作
应用程序/XHTML+xml
。众所周知,
innerHTML
也存在XHTML问题,尤其是在较旧的浏览器中

XSLT2.0有一个输出方法
xhtml
,用于生成格式良好的xhtml,可以作为
text/html
使用,在我看来,这是正确的选择,因为您希望处理发送到旧浏览器的xhtml


鉴于您使用的PHP只支持XSLT 1.0和
innerHTML
的使用,我强烈建议让XSLT样式表创建HTML 4或HTML 5,并避免使用XHTML。如果您想使用XSLT 1.0处理器,那么它通常只支持输出方法
HTML
来生成要用作
text/html
或output method
xml
生成xml或XHTML,以便与xml MIME类型一起使用,如
application/xml
,或与XHTML MIME类型一起使用
application/XHTML+xml
。但是,旧的IE版本(包括IE 8)不支持将XHTML用作
应用程序/XHTML+xml
。众所周知,
innerHTML
也存在XHTML问题,尤其是在较旧的浏览器中

XSLT2.0有一个输出方法
xhtml
,用于生成格式良好的xhtml,可以作为
text/html
使用,在我看来,这是正确的选择,因为您希望处理发送到旧浏览器的xhtml


鉴于您使用的PHP仅支持XSLT 1.0和
innerHTML
的使用,我强烈建议让XSLT样式表创建HTML 4或HTML 5,并避免使用XHTML。

或同时生成:HTML用于基于浏览器的呈现,XHTML用于进一步的应用程序处理。或同时生成:HTML用于基于浏览器的呈现,和XHTML进行进一步的应用程序处理。
    <xsl:output method="xml" /> 
    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));
    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();
    }