Deshabilitación del escape de salida en transformaciones

En este artículo se muestra cómo deshabilitar el escape de salida en transformaciones.

Versión original del producto: Microsoft XML
Número de KB original: 315717

Resumen

En este artículo paso a paso se describe cómo deshabilitar el escape de salida de caracteres, como < and > en una transformación de hoja de estilos XML.

Para garantizar que cualquier salida de transformación XSL sea un documento bien formado, los caracteres de corchetes angulares (< and >) se transforman de forma predeterminada en < and > secuencias de caracteres. Sin embargo, a veces este comportamiento no es deseable, como cuando se desea generar una declaración de tipo de documento (DTD) en el documento de salida:

<!DOCTYPE StaffMember [
 <!ELEMENT StaffMember (#PCDATA)>
]>

Requisitos

En la lista siguiente se describen el hardware, el software, la infraestructura de red y los Service Pack recomendados que son necesarios:

  • Microsoft XML versión 3.0 o posterior

    En este artículo se supone que está familiarizado con los temas siguientes:

  • Transformaciones XML y XSL y el componente MSXML

  • Visual Basic Scripting Edition (VBScript)

  • Modelo de objetos de documento XML (DOM)

Creación de un documento XML y una hoja de estilos XSL

  1. Abra un editor de texto como el Bloc de notas y pegue el siguiente XML en un documento:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="Transform.xsl"?>
    <Employee>
        <Name>Chris</Name>
    </Employee>
    
  2. Guarde este archivo como Source.xml.

  3. Cree un nuevo archivo en el editor de texto y pegue la siguiente hoja de estilos XSL en el archivo.

    Nota:

    Atributo disable-output-escaping="yes" en la primera etiqueta xsl:value-of:

    <?xml version="1.0"?>
    <xsl:stylesheet 
     version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    <xsl:output method="xml" omit-xml-declaration="yes"/>
        <xsl:template match="Employee">
            <xsl:value-of 
             disable-output-escaping="yes"
             select="concat('&lt;!DOCTYPE StaffMember [',
             '&lt;!ELEMENT StaffMember (#PCDATA)&gt;',
             ']&gt;')" />
            <StaffMember>
                <xsl:value-of select="Name"/>
            </StaffMember>
        </xsl:template>
    </xsl:stylesheet>
    
  4. Guarde este archivo como Transform.xsl en la misma carpeta que el documento XML que creó.

Uso del script de Windows para ejecutar la hoja de estilos

  1. Cree un nuevo archivo en el editor de texto y pegue el siguiente script en el archivo: Option Explicit

    Dim objSource
    Dim objTransform
    Dim sResult
    
    Set objSource = CreateObject("MSXML2.DOMDocument")
    objSource.async = False
    objSource.load "Source.xml"
    
    Set objTransform = CreateObject("MSXML2.DOMDocument")
    objTransform.async = False
    objTransform.load "Transform.xsl"
    
    sResult = objSource.TransformNode(objTransform.documentElement)
    
    WScript.Echo sResult
    
  2. Guarde este archivo como Xform.vbs en la misma carpeta que el documento XML y la hoja de estilos XSL que creó.

Prueba del procedimiento

  1. Abra un símbolo del sistema y busque la carpeta que contiene los tres archivos.

  2. Escriba cscript xform.vbs en el símbolo del sistema.

  3. La salida de la transformación se muestra de la siguiente manera en la pantalla:

    <!DOCTYPE StaffMember [<!ELEMENT StaffMember (#PCDATA)>]>
    <StaffMember>Chris</StaffMember>
    

Solución de problemas

Tenga cuidado al usar el disable-output-escaping atributo . Si los caracteres generados < y > no coinciden, el documento de salida no será XML con formato correcto. El método transformNodeToObject requiere que el resultado esté bien formado, por lo que es posible que el método no se complete si disable-output-escaping se usa.