【问题标题】:XSLT Transform screws up <br/> tagsXSLT Transform 搞砸了 <br/> 标签
【发布时间】:2013-08-13 10:27:19
【问题描述】:

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

    <xsl:output method="html" /> 

它生成的代码是有效的 html 代码,但有 br 标记(不带 /),因此它不会验证为 xhtml;

如果我使用

    <xsl:output method="xml" /> 

荒谬之处来了:输出确实有 br/ 标签,并且是正确的 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 似乎可以解决这个问题。为什么?我不知道。仍然:打开的第一个标签总是缺少结束标签

【问题讨论】:

    标签: php javascript html xml xslt


    【解决方案1】:

    如果您想使用 XSLT 1.0 处理器,那么它通常只支持输出方法 html 生成 HTML 4 以作为 text/html 或输出方法 xml 生成 XML 或 XHTML 以提供服务XML MIME 类型,如 application/xml 或与 XHTML MIME 类型 application/xhtml+xml 一起提供服务。然而,较旧的 IE 版本(包括 IE 8)不支持作为 application/xhtml+xml 的 XHTML。众所周知,innerHTML 在 XHTML 方面也存在问题,尤其是在较旧的浏览器中。

    XSLT 2.0 有一个输出方法xhtml 来生成格式良好的XHTML,可以作为text/html 使用,在我看来,您希望处理要发送到旧版浏览器的XHTML,这将是正确的选择。

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

    【讨论】:

    • 或者同时生成:HTML 用于基于浏览器的渲染,XHTML 用于进一步的应用程序处理。
    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2011-10-01
    • 2021-03-05
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多