El uso de XSLT en línea de un archivo XML

Tengo un archivo XML y un externo de archivo XSLT.

Actualmente, dentro de mi XML me refiero a un XSLT externos vínculo con un href:

 <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="stylesheet.xsl" ?>
     <mytag>
         <t1> </t1>
         <t2> </t2>
         <t3> <t3>
     <mytag>

¿Cómo puedo usar XSLT en línea en su lugar? Es esto posible? Si sí, ¿cómo?

InformationsquelleAutor Akshay | 2011-08-20

2 Kommentare

  1. 10

    Sí, es posible incrustar el XSLT en el interior de su XML.

    XSLT es un archivo XML, por lo que sólo necesita para asegurarse de que usted puso en el interior del elemento de documento de su archivo XML, de modo que el archivo XML está todavía bien formado.

    De hecho, se describe en la especificación XSLT:

    2.7 La Incrustación De Hojas De Estilo

    Normalmente una hoja de estilos XSLT es un completo documento XML con el
    xsl:stylesheet elemento como un elemento del documento. Sin embargo, una XSLT
    hoja de estilos pueden ser incrustados en otro recurso. Dos formas de
    la incrustación son posibles:

    • la hoja de estilos XSLT puede ser textualmente incrustado en un no-XML
      de recursos, o
    • el xsl:stylesheet elemento puede aparecer en un documento XML otros que
      como el elemento documento.

    Para facilitar la segunda forma de incrustación, el xsl:stylesheet elemento
    se le permite tener un atributo ID que especifica un identificador único.

    NOTA: a fin de que un atributo para ser utilizado con el XPath id
    la función, que en realidad debe ser declarada en el DTD como un ID.

    El siguiente ejemplo muestra cómo el procesamiento xml-stylesheet
    la instrucción [XML Stylesheet] puede ser usado para permitir un documento a
    contienen su propia hoja de estilos. El URI de referencia utiliza un URI relativo con
    un identificador de fragmento para localizar el archivo xsl:stylesheet elemento:

    <?xml-stylesheet type="text/xml" href="#style1"?>
    <!DOCTYPE doc SYSTEM "doc.dtd">
    <doc>
    <head>
    <xsl:stylesheet id="style1"
                    version="1.0"
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:import href="doc.xsl"/>
    <xsl:template match="id('foo')">
      <fo:block font-weight="bold"><xsl:apply-templates/></fo:block>
    </xsl:template>
    <xsl:template match="xsl:stylesheet">
      <!-- ignore -->
    </xsl:template>
    </xsl:stylesheet>
    </head>
    <body>
    <para id="foo">
    ...
    </para>
    </body>
    </doc>

    NOTA: UNA hoja de estilo que está incrustado en el documento del cual
    ser aplicado o que pueden ser incluidos o importados en una hoja de estilos que
    está tan arraigado, normalmente debe contener una plantilla regla que
    especifica que xsl:stylesheet elementos deben ser ignorados.

    Dependiendo de cómo va a aprovechar de ti, incrustado hojas de estilo pueden no ser compatibles. Por ejemplo, en internet explorer 6/7/8. Hay algunas soluciones.

  2. 0

    Para las pruebas en el lado del cliente procesadores, utilice un auto-referencia de la hoja de estilos:

    <?xml version="1.0" encoding="utf-8"?>
    <!--Reference the file name as the href value-->
    <?xml-stylesheet type="text/xsl" href="html5.xml"?>
    <xsl:stylesheet version="1.0"
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"
                    >
    
    <!-- Output HTML doctype with text/html content-type and without XML declaration-->
    <xsl:output method="xml" encoding="utf-8" version="" indent="yes" standalone="no" media-type="text/html" omit-xml-declaration="yes" doctype-system="about:legacy-compat" />
    
    
    <!-- Read the children of the stylesheet itself -->
    <xsl:template match="xsl:stylesheet">
      <xsl:apply-templates/>
    </xsl:template>
    
    <!-- Output the HTML markup-->
    <xsl:template match="/">
      <html>
        <head>
          <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
          <link rel="stylesheet" type="text/css" href="foo.css"/>
        </head>
        <body>
          <div class="foo">
            <span class="bar">
               <span class="baz">1</span>
            </span>
            <!--Added comment to fill empty node-->
            <span class="placeholder"><xsl:comment/></span>
          </div>
    
          <!-- Read matching templates -->
          <xsl:apply-templates />
            <!--Add comment to fill empty script tag-->
            <script src="foo.js" type="application/x-javascript"><xsl:comment/></script>
        </body>
      </html>
    </xsl:template>
    
    <!-- Don't reprint text nodes within the xsl:stylesheet node -->
    <xsl:template match="text()"/>
    
    <!-- Read non-namespaced nodes within the xsl:stylesheet node -->
    <xsl:template match="//node()[local-name() = name()]">
      <xsl:if test="local-name() = 'foo'">
        <xsl:variable name="foo" select="."/>
    
        <input type="text" id="{$foo}" value="{$foo}"></input>
      </xsl:if>
      <xsl:apply-templates/>
    </xsl:template>
    
    <test>
     <foo>A</foo> 
     <foo>B</foo> 
     <foo>C</foo>
    </test>
    
    </xsl:stylesheet> 

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea