Tengo el siguiente código que se aplica un estilo XSLTChrome y Safari XSLT utilizando JavaScript
Test.Xml.xslTransform = function(xml, xsl) {
try {
// code for IE
if (window.ActiveXObject) {
ex = xml.transformNode(xsl);
return ex;
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument) {
xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
resultDocument = xsltProcessor.transformToFragment(xml, document);
return resultDocument;
}
} catch (exception) {
if (typeof (exception) == "object") {
if (exception.message) {
alert(exception.message);
}
} else {
alert(exception);
}
}
El código está trabajando en IE y Firefox, pero no en Chrome y Safari. ¿Alguna idea de por qué?
actualización
ResultDocument = xsltProcessor.transformToFragment(xml, document);
La línea anterior está volviendo nula. No se arrojó ningún error.
actualización
El código no está funcionando como el archivo XSL XSLT contiene: include. Necesidad de encontrar una manera de conseguir el trabajo incluyen voy a pegar aquí el progreso
actualización
Se ha recomendado que utilizo el plugin http://plugins.jquery.com/project/Transform/. Estoy intentando utilizar la biblioteca del lado del cliente como el ejemplo de incluir trabajos aquí (http://daersystems.com/jquery/transform/).
El código funciona en IE pero aún no está en cromo.
Test.Xml.xslTransform = function(xml, xsl) {
try {
$("body").append("<div id='test' style='display:none;'></div>");
var a = $("#test").transform({ xmlobj: xml, xslobj: xsl });
return a.html();
}
catch (exception) {
if (typeof (exception) == "object") {
if (exception.message) {
alert(exception.message);
}
} else {
alert(exception);
}
}
}
XML y XSL son ambos objetos se pasan en.
actualización
He intentado cambiar el archivo XSL a ser algo muy simple, sin incluir y Chrome todavía no está aplicando la hoja de estilo e IE es. El XSL que está siendo traído como un objeto es:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:spsoap="http://schemas.microsoft.com/sharepoint/soap/"
>
<xsl:output method="html"/>
<xsl:template match="/">
<h1>test</h1>
</xsl:template>
</xsl:stylesheet>
actualización
El resultado final que yo quiero es que el XSL que se aplicará al archivo XML. El archivo xsl tiene incluido. Quiero que la transferencia ocurra en el cliente idealmente.
actualizado Rupert se puede actualizar a la pregunta con el XML y cómo lo está llamando Test.Xml.xslTransform?
que tiene el código XML usando IE8
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><SearchListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/"><SearchListItemsResult><listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
<rs:data ItemCount="1">
<z:row ows_Title="Test" ows_FirstName="Test 4" ows_UniqueId="74;#{1A16CF3E-524D-4DEF-BE36-68A964CC24DF}" ows_FSObjType="74;#0" ows_MetaInfo="74;#" ows_ID="74" ows_owshiddenversion="10" ows_Created="2009-12-29 12:21:01" ows_FileRef="74;#Lists/My List Name/74_.000" ReadOnly="False" VerificationRequired="0"/>
</rs:data>
</listitems></SearchListItemsResult></SearchListItemsResponse></soap:Body></soap:Envelope>
El código está siendo llamado de la siguiente manera:
xsl = Test.Xml.loadXMLDoc("/_layouts/xsl/xsl.xslt");
var doc = Test.Xml.xslTransform(xData.responseXML, xsl);
XDATA es el XML devuelto por un servicio web.
Proporcione más información, como el mensaje de excepción. Recomiendo usar Sarissa (JavaScript de código abierto para XML/XSLT entre navegadores). –
Quizás el XSLT en el XML no devuelva ningún resultado porque ninguna de las plantillas en el XSLT coincide en el documento XML. Ver mi blog "Evitar errores XSLT comunes" (http://dev.ektron.com/blogs.aspx?id=22956), especialmente el enlace "XSLT: espacios de nombres" (http://dev.ektron.com/kb_article.aspx ? id = 481) –
Parece que hay un problema al usar xsl: include en xslt. En busca de formas alrededor de este momento. – Rupert