2010-08-11 22 views
26

Los ejemplos en¿Cómo vincular el archivo XML con el archivo XSLT?

http://en.wikipedia.org/wiki/XSLT

o

http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog

parecen ser archivos XML y XSLT independientes. ¿No tienen que estar vinculados? ¿O los colocas de alguna manera en un mismo archivo? De lo contrario, ¿cómo sabe un archivo cómo absorber los datos del otro archivo?

+1

Acepto que algunas de las páginas de W3Schools, como esta, son inadecuadas.Podrían haber incluido fácilmente la mención de vincular la hoja de estilo, como se hace en [XSLT - Transformation] (http://www.w3schools.com/xsl/xsl_transformation.asp). – user34660

Respuesta

47

puede agregar a este después de la declaración XML

<?xml-stylesheet type="text/xsl" href="yourxsl.xsl"?> 
+3

esto es para poner en el archivo XML (datos)? ¿Es esta la única manera o también puedes decirle a un archivo XSLT que obtenga datos de qué archivo XML, o tener un tercer archivo que incluya tanto un archivo XML con un archivo XSLT? –

+0

si usa Altova XMLSpy puede agregar, por ejemplo, En la cláusula . Puede usar URL/ruta relativa o absoluta allí [el analizador de comentarios aquí parece devorar el prefijo http: // de mi url]. Otras herramientas pueden tener una sintaxis similar. Sería bueno si uno pudiera usar alguna sintaxis estándar en su lugar en el archivo XSL (ya que hay casos como este donde el archivo XML es remoto y no se puede tocar) –

+0

alternativa podría ser incluir el archivo XML en otro XML archivo de alguna manera que especifica la hoja de estilo, pero no estoy seguro de si esto es sencillo (podría necesitar crear especialmente las XPaths, etc.) –

1

Necesita una herramienta externa o biblioteca para aplicar una transformación XSLT a XML. Cómo se hace esto depende de su entorno de programación, sin embargo, para .Net, el XslCompiledTransform es la clase utilizada para aplicar una transformación Xslt a un fragmento de Xml (ya sea un archivo o Xml en la memoria).

Alternativa puede utilizar la herramienta de línea de comandos de Microsoft xslt.exe - tendrá que investigar por sí mismo cómo hacer lo mismo en otros lenguajes de programación/sistemas operativos.

3

También puede realizar la transformación en una página HTML:

<script type="text/javascript"> 
    var xml = new ActiveXObject("Microsoft.XMLDOM") 
    xml.async = false 
    xml.load("some_xml.xml") 
    var xsl = new ActiveXObject("Microsoft.XMLDOM") 
    xsl.async = false 
    xsl.load("some_xsl.xsl") 
    document.write(xml.transformNode(xsl)) 
</script> 
+0

¿y si no es IE? –

+0

Obtuvo muestras en: http://www.w3schools.com/xml/xml_parser.asp Sobre cómo hacerlo en los navegadores modernos :) –

3

Un archivo no conoce a "aspirar en los datos" el otro archivo, ya que los archivos no son lo que va a hacer el procesamiento.

Algún tipo de procesador XSLT hará esto, y la forma en que se le dirá en qué trabajar varía para que pueda manejar diferentes casos de uso.

En el caso de la prestación del transform completo de un documento XML cuando se muestra en un navegador, entonces el procesamiento instrucción:

<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> 

(realmente debería haber sido "text/xml" para el tipo como ese es el tipo de mimo de un documento XSL, pero esto estaba en la cola de las guerras de los navegadores y la implementación de la característica del navegador todavía estaba ocurriendo más rápido que la velocidad del sentido común).

Si está controlando la transformación programáticamente utilizando una biblioteca de algún tipo (hay objetos para javascript en el lado del cliente y bibliotecas en cualquier idioma del que probablemente quiera hacer esto), entonces tiene suficiente control para detallar qué se transforma por qué. Algunos casos interesantes aquí incluyen.

  1. Incluso podría tener un documento con un nodo de contenido y un nodo de transformaciones, seleccionarlas y ejecutar la transformación.

  2. Si está ejecutando la misma transformación en múltiples documentos XML, a menudo es más eficiente llamar a algún tipo de método "PreCompile()" o similar, que recibe un golpe en esa llamada para beneficiar a todas las transformaciones posteriores .

  3. Puede pasar valores a los parámetros de nivel superior en el XSLT.

Cuestiones relacionadas