 |
|
|
这就打开了DOMDocument上的Istream界面并把XML数据以XML的格式直接写到DOMDocument。这个XML数据包括了通常没有什么价值的名字空间信息,所以如果你只想获得“纯的”XML,你就必须把这个XML添加到客户端的XML数据岛并通过XSL转换来传递它。使用XSL,你就可以把该XML(它包括了行和数据定义的大纲信息)转换成只包含你感兴趣的XML。我已经创建了一个普通XSL样式表来把任何简单Recordset
XML转换成普通XML:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema"/>
<xsl:output method="xml" omit-xml-declaration="yes"
/>
<xsl:template match="/">
<xsl:apply-templates select="//z:row"/>
</xsl:template>
<xsl:template match="z:row">
<xsl:text disable-output-escaping="yes"><row></xsl:text>
<xsl:for-each select="@*">
<xsl:text
disable-output-escaping="yes"><</xsl:text>
<xsl:value-of
select="name()"/>
<xsl:text
disable-output-escaping="yes">></xsl:text>
<xsl:value-of
select="."/>
<xsl:text
disable-output-escaping="yes"></</xsl:text>
<xsl:value-of
select="name()"/>
<xsl:text
disable-output-escaping="yes">></xsl:text>
</xsl:for-each>
<xsl:text disable-output-escaping="yes"></row></xsl:text>
</xsl:template>
</xsl:stylesheet>
这个样式表把每个z:row节点转换成一个更自然的形式。当该Recordset保存为XML,每个行都转换成一个z:row节点(它带有一组属性,每个属性对应与记录中的一个字段)。字段属性设置为当前字段值。
每个属性被转换成<fieldname>fieldvalue</fieldname>的格式。为了防止名字空间信息附加到新的节点上,我用了<xsl:text>元素来创建< and >符号而不是用<xsl:element>来创建新的元素。
name() XPath函数返回属性的名字,属性的值用“.”来返回。在转换之后,所有的新节点都被包装到一个<row>元素中。
下面是进行这个转换的代码:
Dim oXSL
Set oXSL = Server.CreateObject("MSXML2.DOMDocument")
oXSL.async = False
oXSL.loadServer.MapPath("ADOGeneric.xsl") 'our XSL stylesheet
Response.Write "<XML id='xmlData' name='xmlData'><root>"
& vbCrLf
Response.WriteoXML.transformNode(oXSL)
Response.Write "</root></XML>"
上面的代码会为你产生“干净”的XML。关于XSLT的更多信息,请参阅MSDN库的微软XSLT参考。
责任编辑:炒饭
欢迎评论或投稿
|