我正在尝试进行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似乎可以解决这个问题。为什么?我不知道。仍然:打开的第一个标签总是缺少结束标签答案 0 :(得分: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并使用innerHTML
的PHP,我强烈建议让XSLT样式表创建HTML 4或HTML 5并避免使用XHTML。