変換で出力エスケープを無効にする

この記事では、変換で出力エスケープを無効にする方法について説明します。

元の製品バージョン: Microsoft XML
元の KB 番号: 315717

概要

この記事では、XML スタイル シート変換などの < and > 文字の出力エスケープを無効にする方法について説明します。

XSL 変換出力が適切な形式のドキュメントであることを保証するために、山かっこ文字 (< and >) は既定で文字シーケンスに < and > 変換されます。 ただし、出力ドキュメントでドキュメント型宣言 (DTD) を生成する場合など、この動作が望ましくない場合があります。

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

要件

次の一覧は、必要な推奨ハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、およびサービス パックの概要を示しています。

  • Microsoft XML バージョン 3.0 以降

    この記事では、次のトピックについて理解していることを前提としています。

  • XML 変換と XSL 変換と MSXML コンポーネント

  • Visual Basic Scripting Edition (VBScript)

  • XML ドキュメント オブジェクト モデル (DOM)

XML ドキュメントと XSL スタイル シートを作成する

  1. メモ帳などのテキスト エディターを開き、次の XML をドキュメントに貼り付けます。

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="Transform.xsl"?>
    <Employee>
        <Name>Chris</Name>
    </Employee>
    
  2. このファイルを Source.xmlとして保存します。

  3. テキスト エディターで新しいファイルを作成し、次の XSL スタイル シートをファイルに貼り付けます。

    注:

    最初の xsl:value-of タグの disable-output-escaping="yes" 属性:

    <?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. このファイルを Transform.xsl として、作成した XML ドキュメントと同じフォルダーに保存します。

Windows スクリプトを使用してスタイル シートを実行する

  1. テキスト エディターで新しいファイルを作成し、ファイルに次のスクリプトを貼り付けます: 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. このファイル を、作成した XML ドキュメントおよび XSL スタイル シートと同じフォルダーにXform.vbsとして保存します。

プロシージャをテストする

  1. コマンド プロンプトを開き、3 つのファイルを含むフォルダーを見つけます。

  2. コマンド プロンプトで「」と入力 cscript xform.vbs します。

  3. 変換からの出力は、画面に次のように表示されます。

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

トラブルシューティング

属性を使用 disable-output-escaping する場合は注意してください。 生成された < 文字と > 文字が一致しない場合、出力ドキュメントは適切な形式の XML になりません。 transformNodeToObject メソッドでは結果が適切に形成されている必要があるため、メソッドが使用されている場合はメソッドが完了しない可能性 disable-output-escaping があります。