Php XSLT转换出错<;br/>;标签
我正在尝试进行XSLT转换(服务器端,使用php),我希望XHTML作为转换的输出,因为它是XHTML页面的一部分。 如果我使用 加载输出的JS如下所示: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
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 methodxml
生成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();
}