2013-08-13 2 views
1

Я пытаюсь преобразовать XSLT (серверная сторона, с php), и я хочу XHTML как вывод этого преобразования, потому что он является частью страницы XHTML. Если я используюXSLT Transform screw up <br/> теги

<xsl:output method="html" /> 

он генерирует код, действительный HTML-код, но имеет BR теги (без /), поэтому он не будет проверять, как XHTML;

Если я использую

<xsl:output method="xml" /> 

здесь приходит нелепость: выход имеет BR/теги, и собственно XML, но когда я положил его в страницу он принадлежит, некоторые закрывающие теги не исчезают нет очевидная причина.

Вот XSL файл http://hbxplayer.sf.net/test/mobile.xsl (это немного долго вставив его здесь)

РНР, что делает преобразование заключается в следующем:

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, поэтому я могу делать что-то неправильно.

Заранее спасибо :)

EDIT: Ввод DIV вокруг каждого элемента, кажется, чтобы исправить эту проблему. Зачем? Понятия не имею. Тем не менее: первый тег открыт всегда отсутствует закрывающий тег

ответ

1

Ну, если вы хотите использовать процессор XSLT 1.0, то она обычно поддерживает только либо метод html выхода для генерации HTML 4, чтобы служить как text/html или метод вывода xml для генерации XML или XHTML для использования с типом XML MIME, например application/xml, или для обслуживания с типом MIME XHTML application/xhtml+xml. Однако более старая версия IE (включая IE 8) не поддерживает XHTML, который используется как application/xhtml+xml. Известно, что innerHTML имеет проблемы с XHTML, в частности в старых браузерах.

XSLT 2.0 имеет метод вывода xhtml генерировать хорошо сформированную XHTML, который может быть подан в text/html и что было бы правильным вариантом, на мой взгляд на вы хотите иметь дело с XHTML для отправки в старых браузерах.

Учитывая, что вы используете PHP, который поддерживает только XSLT 1.0 и использует innerHTML, я настоятельно рекомендую создать таблицу стилей XSLT для создания HTML 4 или HTML 5 и избежать XHTML.

+0

Или создайте оба: HTML для рендеринга на основе браузера и XHTML для дальнейшей обработки приложений. –