php - XSLT 转换搞砸了 <br/> 标签

标签 php javascript html xml xslt

我正在尝试进行 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 似乎可以解决这个问题。为什么?我不知道。尽管如此:打开的第一个标签总是缺少结束标签

最佳答案

如果您想使用 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。

关于php - XSLT 转换搞砸了 <br/> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18206662/

相关文章:

php - is_dir 无法正常工作

Javascript 比较运算符顺序

java - 无法创建外键mysql

php - 在 vim 中为 php 设置了错误的注释

php - 使用 jquery 在 XHR 响应中单击

javascript - 尝试通过ajax销毁ruby on Rails中关系实体的请求

php - 当我将它插入 MySQL 时,我的代码发生了变化

html - 删除显示行内 block 中的底部空间

iphone - 如何在 iOS >= 4.2.1 Mobile Safari 中自动播放媒体?

javascript - Canvas 放置问题