在转换中禁用输出转义
本文介绍如何在转换中禁用输出转义。
原始产品版本: 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 样式表
打开文本编辑器(如记事本),然后将以下 XML 粘贴到文档中:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="Transform.xsl"?> <Employee> <Name>Chris</Name> </Employee>
将此文件另存为 Source.xml。
在文本编辑器中创建一个新文件,然后将以下 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('<!DOCTYPE StaffMember [', '<!ELEMENT StaffMember (#PCDATA)>', ']>')" /> <StaffMember> <xsl:value-of select="Name"/> </StaffMember> </xsl:template> </xsl:stylesheet>
将此文件另存为 Transform.xsl,将其保存在与创建的 XML 文档相同的文件夹中。
使用 Windows 脚本执行样式表
在文本编辑器中创建新文件,然后将以下脚本粘贴到文件中:选项显式
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
将此文件保存为 Xform.vbs 与创建的 XML 文档和 XSL 样式表相同的文件夹中。
测试过程
打开命令提示符,然后找到包含三个文件的文件夹。
在命令提示符处键入
cscript xform.vbs
。转换的输出将在屏幕上显示如下:
<!DOCTYPE StaffMember [<!ELEMENT StaffMember (#PCDATA)>]> <StaffMember>Chris</StaffMember>
疑难解答
使用 属性时要 disable-output-escaping
小心。 如果生成的 < 和 > 字符不匹配,则输出文档将不是格式正确的 XML。 transformNodeToObject 方法要求结果格式正确,因此如果使用 ,则方法可能无法完成 disable-output-escaping
。