Disabilitare l'escape dell'output nelle trasformazioni

Questo articolo illustra come disabilitare l'escape dell'output nelle trasformazioni.

Versione originale del prodotto: Microsoft XML
Numero KB originale: 315717

Riepilogo

Questo articolo dettagliato descrive come disabilitare l'escape di output di caratteri, ad < and > esempio in una trasformazione foglio di stile XML.

Per garantire che qualsiasi output di trasformazione XSL sia un documento ben formato, i caratteri parentesi angolari (< and >) vengono trasformati per impostazione predefinita in < and > sequenze di caratteri. Tuttavia, a volte questo comportamento non è auspicabile, ad esempio quando si vuole generare una dichiarazione di tipo documento (DTD) nel documento di output:

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

Requisiti

L'elenco seguente descrive l'hardware, il software, l'infrastruttura di rete e i Service Pack consigliati necessari:

  • Microsoft XML versione 3.0 o successiva

    Questo articolo presuppone che si abbia familiarità con gli argomenti seguenti:

  • Trasformazioni XML e XSL e componente MSXML

  • Visual Basic, Scripting Edition (VBScript)

  • DOM (Document Object Model) XML

Creare un documento XML e un foglio di stile XSL

  1. Aprire un editor di testo, ad esempio Blocco note, e quindi incollare il codice XML seguente in un documento:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="Transform.xsl"?>
    <Employee>
        <Name>Chris</Name>
    </Employee>
    
  2. Salvare il file come Source.xml.

  3. Creare un nuovo file nell'editor di testo e quindi incollare il foglio di stile XSL seguente nel file.

    Nota

    Attributo disable-output-escapeing="yes" nel primo tag 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. Salvare questo file come Transform.xsl nella stessa cartella del documento XML creato.

Usare lo script di Windows per eseguire il foglio di stile

  1. Creare un nuovo file nell'editor di testo e quindi incollare lo script seguente nel file: Opzione esplicita

    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. Salvare questo file come Xform.vbs nella stessa cartella del documento XML e del foglio di stile XSL creato.

Testare la procedura

  1. Aprire un prompt dei comandi e quindi individuare la cartella che contiene i tre file.

  2. Digitare cscript xform.vbs al prompt dei comandi.

  3. L'output della trasformazione viene visualizzato come indicato di seguito sullo schermo:

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

Risoluzione dei problemi

Prestare attenzione quando si usa l'attributo disable-output-escaping . Se i caratteri e > generati < non corrispondono, il documento di output non sarà xml ben formato. Il metodo transformNodeToObject richiede che il risultato sia ben formato, quindi il metodo potrebbe non essere completo se disable-output-escaping viene usato.