Inaktivera utdata som undflyer i transformeringar
Den här artikeln visar hur du inaktiverar utdata som kommer från transformeringar.
Ursprunglig produktversion: Microsoft XML
Ursprungligt KB-nummer: 315717
Sammanfattning
Den här stegvisa artikeln beskriver hur du inaktiverar utdata från tecken, till exempel < and >
i en XML-formatmallstransformering.
För att garantera att XSL-transformeringsutdata är ett välformat dokument omvandlas vinkelparentestecken (< and >
) som standard till < and >
teckensekvenser. Men ibland är detta inte önskvärt, till exempel när du vill generera en dokumenttypsdeklaration (DTD) i utdatadokumentet:
<!DOCTYPE StaffMember [
<!ELEMENT StaffMember (#PCDATA)>
]>
Krav
I följande lista beskrivs de rekommenderade maskinvaru-, programvaru-, nätverksinfrastruktur- och servicepaket som krävs:
Microsoft XML version 3.0 eller senare
Den här artikeln förutsätter att du är bekant med följande ämnen:
XML- och XSL-transformeringar och MSXML-komponenten
Visual Basic Scripting Edition (VBScript)
XML-dokumentobjektmodell (DOM)
Skapa ett XML-dokument och en XSL-formatmall
Öppna en textredigerare, till exempel Anteckningar, och klistra sedan in följande XML i ett dokument:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="Transform.xsl"?> <Employee> <Name>Chris</Name> </Employee>
Spara den här filen som Source.xml.
Skapa en ny fil i textredigeraren och klistra sedan in följande XSL-formatmall i filen.
Obs!
Attributet disable-output-escapeing="yes" i den första xsl:value-of-taggen:
<?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('<!DOCTYPE StaffMember [', '<!ELEMENT StaffMember (#PCDATA)>', ']>')" /> <StaffMember> <xsl:value-of select="Name"/> </StaffMember> </xsl:template> </xsl:stylesheet>
Spara den här filen som Transform.xsl i samma mapp som DET XML-dokument som du skapade.
Använda Windows-skript för att köra formatmallen
Skapa en ny fil i textredigeraren och klistra sedan in följande skript i filen: Alternativet är 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
Spara den här filen som Xform.vbs i samma mapp som XML-dokumentet och XSL-formatmallen som du skapade.
Testa proceduren
Öppna en kommandotolk och leta upp mappen som innehåller dina tre filer.
Skriv
cscript xform.vbs
i kommandotolken.Utdata från omvandlingen visas på följande sätt på skärmen:
<!DOCTYPE StaffMember [<!ELEMENT StaffMember (#PCDATA)>]> <StaffMember>Chris</StaffMember>
Felsökning
Var försiktig när du använder attributet disable-output-escaping
. Om de genererade < tecknen och > inte matchar kommer utdatadokumentet inte att vara välformulerad XML. Metoden transformNodeToObject kräver att resultatet är välformat, så metoden kanske inte slutförs om disable-output-escaping
den används.