Désactiver l’échappement de sortie dans les transformations

Cet article explique comment désactiver l’échappement de sortie dans les transformations.

Version d’origine du produit : Microsoft XML
Numéro de la base de connaissances d’origine : 315717

Résumé

Cet article pas à pas explique comment désactiver l’échappement de sortie de caractères tels que < and > dans une transformation de feuille de style XML.

Pour garantir que toute sortie de transformation XSL est un document bien formé, les caractères de crochets angulaires (< and >) sont transformés par défaut en < and > séquences de caractères. Toutefois, parfois, ce comportement n’est pas souhaitable, par exemple lorsque vous souhaitez générer une déclaration de type de document (DTD) dans le document de sortie :

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

Configuration requise

La liste suivante décrit le matériel, les logiciels, l’infrastructure réseau et les Service Packs recommandés :

  • Microsoft XML version 3.0 ou ultérieure

    Cet article suppose que vous êtes familiarisé avec les rubriques suivantes :

  • Transformations XML et XSL et composant MSXML

  • Visual Basic Scripting Edition (VBScript)

  • DOM (Document Object Model) XML

Créer un document XML et une feuille de style XSL

  1. Ouvrez un éditeur de texte tel que le Bloc-notes, puis collez le code XML suivant dans un document :

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="Transform.xsl"?>
    <Employee>
        <Name>Chris</Name>
    </Employee>
    
  2. Enregistrez ce fichier sousSource.xml.

  3. Créez un fichier dans votre éditeur de texte, puis collez la feuille de style XSL suivante dans le fichier.

    Remarque

    L’attribut disable-output-escaping="yes » dans la première balise 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. Enregistrez ce fichier en tant que Transform.xsl dans le même dossier que le document XML que vous avez créé.

Utiliser le script Windows pour exécuter la feuille de style

  1. Créez un fichier dans votre éditeur de texte, puis collez le script suivant dans le fichier : Option Explicite

    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. Enregistrez ce fichier en tant queXform.vbs dans le même dossier que le document XML et la feuille de style XSL que vous avez créée.

Tester la procédure

  1. Ouvrez une invite de commandes, puis recherchez le dossier qui contient vos trois fichiers.

  2. Tapez cscript xform.vbs à l’invite de commandes.

  3. La sortie de la transformation s’affiche comme suit à l’écran :

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

Résolution des problèmes

Soyez prudent lorsque vous utilisez l’attribut disable-output-escaping . Si les caractères générés < et > ne correspondent pas, le document de sortie n’est pas du code XML bien formé. La méthode transformNodeToObject nécessite que le résultat soit bien formé, de sorte que la méthode peut ne pas se terminer si disable-output-escaping elle est utilisée.