gpt4 book ai didi

php - XSLT 转换搞砸了
标签

转载 作者:行者123 更新时间:2023-11-28 02:02:52 25 4
gpt4 key购买 nike

我正在尝试进行 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com