在转换中禁用输出转义

本文介绍如何在转换中禁用输出转义。

原始产品版本: Microsoft XML
原始 KB 编号: 315717

摘要

本文分步介绍如何禁用字符的输出转义,例如 < and > 在 XML 样式表转换中。

为了保证任何 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. 在文本编辑器中创建新文件,然后将以下脚本粘贴到文件中:选项显式

    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. 将此文件保存为 Xform.vbs 与创建的 XML 文档和 XSL 样式表相同的文件夹中。

测试过程

  1. 打开命令提示符,然后找到包含三个文件的文件夹。

  2. 在命令提示符处键入 cscript xform.vbs

  3. 转换的输出将在屏幕上显示如下:

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

疑难解答

使用 属性时要 disable-output-escaping 小心。 如果生成的 < 和 > 字符不匹配,则输出文档将不是格式正确的 XML。 transformNodeToObject 方法要求结果格式正确,因此如果使用 ,则方法可能无法完成 disable-output-escaping