利用XSLT来换XML的根

2016-02-19 19:03 9 1 收藏

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的利用XSLT来换XML的根,过去的都会过去,迎接崭新的开始,释放更美好的自己。

【 tulaoshi.com - Web开发 】

写程序需要换XML的根,感觉很不便,于是写了一个函数,大致思路及实现如下:

  首先觉得利用XSLT还能过滤一些东西,然后再发送回客户端,所以决定采用XSLT

  然后就是尝试写一个换根的XSL,如下

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

?xml version="1.0" encoding="gb2312" ?
xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xsl:output method="xml" version="1.0" encoding="gb2312" omit-xml-declaration="yes" indent="yes" /

xsl:template match="/"
NEWNODENAME
xsl:apply-templates select="@* | node()" /
/NEWNODENAME
/xsl:template

xsl:template match="@* | node()"
xsl:choose
xsl:when test=".!=ancestor::node()"xsl:copyxsl:apply-templates select="@* | node()"//xsl:copy/xsl:when
xsl:otherwisexsl:apply-templates select="@* | node()"//xsl:otherwise
/xsl:choose
/xsl:template

/xsl:stylesheet

大致意思是,解析一个XML中的所有结点及属性,如果非根就直接拷贝,否则就查看是否存在子结点及属性。具体资料请参照MSXML的SDK文档。

  然后写一个函数,使得NEWNODENAME可以指定:

这段代码为VB.Net中的实现,ASP中实现时需要注意对象附值需要用Set,还有返回值的问题

Public Function ChangeXmlRootNodeName(ByRef oXml As MSXML2.DOMDocument, ByVal name As String) As String
If oXml Is Nothing Then
Return ""
End If
Dim sXslt As String
sXslt = "?xml version=""1.0"" encoding=""gb2312"" ?" & vbCrLf
sXslt = sXslt & "xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform""" & vbCrLf
sXslt = sXslt & "xsl:output method=""xml"" version=""1.0"" encoding=""gb2312"" omit-xml-declaration=""yes"" indent=""yes"" /" & vbCrLf
sXslt = sXslt & vbCrLf
sXslt = sXslt & "xsl:template match=""/""" & vbCrLf
sXslt = sXslt & "" & name & """ & vbCrLf"
sXslt = sXslt & " xsl:apply-templates select=""@* | node()""/" & vbCrLf
sXslt = sXslt & "/" & name & "" & vbCrLf
sXslt = sXslt & "/xsl:template" & vbCrLf
sXslt = sXslt & vbCrLf
sXslt = sXslt & "xsl:template match=""@* | node()""" & vbCrLf
sXslt = sXslt & " xsl:choose" & vbCrLf
sXslt = sXslt & " xsl:when test="".!=ancestor::node()""xsl:copyxsl:apply-templates select=""@* | node()""//xsl:copy/xsl:when" & vbCrLf
sXslt = sXslt & " xsl:otherwisexsl:apply-templates select=""@* | node()""//xsl:otherwise" & vbCrLf
sXslt = sXslt & " /xsl:choose"" & vbCrLf"
sXslt = sXslt & "/xsl:template"" & vbCrLf"
sXslt = sXslt & vbCrLf
sXslt = sXslt & "/xsl:stylesheet" & vbCrLf

Dim oXsl As New MSXML2.DOMDocument
oXsl.async = False
oXsl.resolveExternals = False
oXsl.loadXML(sXslt)

Dim sXml As String

sXml = oXml.transformNode(oXsl)

sXml = AddXmlHeader(sXml)

 sXsl = Nothing

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

Return sXml
End Function

  还有,当然你也可以实现生成那个XSL的XSL文件,这就要看你如何设计了。

来源:http://www.tulaoshi.com/n/20160219/1619909.html

延伸阅读
标签: PHP
<?php         require_once "DB.php";            //PEAR中的数据库处理类     $dataType = "mysql" ;           &...
标签: Web开发
使用一个简单的 XSL 样式表就可以将 XML 数据转换成 HTML。随着 XML 规范的不断演进,在新的版本中满足每个人的需要似乎已经成为必要;不幸的是,进行简单的转换一直都困扰着规范。 假设我有一个表示一个页面内容的 XML 数据,现在我想将其内容转换成布局。下面是我想要转换的 XML: ?xml version='1.0'? ?x...
标签: Web开发
    最近使用Firefox进行网页的调试,发现有些Javascript XSLT处理XML的语句仅仅支持IE浏览器。而网络中的一些介绍javascript XSLT 处理XML的文章基本上都是依据AJAX来做的。     无奈中,自己写了一个Javascript XSLT处理XML展现页面的小功能。现在帖出来和大家共享,希望大家给点改进意见。   &nb...
标签: Web开发
我们知道 XML+XSLT就可以直接输出到支持XML的浏览器上,如IE 5.0以上,但是,我们还要考虑到有不少浏览器不直接支持XML,在这种情况下,我们需要在服务器上进行转换成html输出到浏览器,这种临时过渡办法恐怕要在一段时间内一直要使用. 使用Jsp 加上tablib标识库,我们可以完成这种转换。 著名open source项目组jakarta.apache.org推出...
标签: Java JAVA基础
  我们知道 XML+XSLT就可以直接输出到支持XML的浏览器上,如IE 5.0以上,但是,我们还要考虑到有不少浏览器不直接支持XML,在这种情况下,我们需要在服务器上进行转换成html输出到浏览器,这种临时过渡办法恐怕要在一段时间内一直要使用. 使用Jsp 加上tablib标识库,我们可以完成这种转换。 著名open source项目组jakarta.apache.org...

经验教程

778

收藏

97
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部