利用XSLT来换XML的根

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

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

【 tulaoshi.com - Web开发 】

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

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

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

?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可以指定:

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

这段代码为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

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

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

Return sXml
End Function

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

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

延伸阅读
标签: 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推出...
标签: PHP
原创: 作者:xiaocon 邮箱:xiaocon@21cn.com 转载请注明出处 一 php与XML、XSLT、Mysql的结合运用,安装篇     经常看到有用户问一些关于php与XML、数据库结合运用的贴子,也经常看到一些初学者     把php代码与HTML代码混写到一起,然后在出错的时候找不到错误,急得团团转,下...
标签: Java JAVA基础
  我们知道 XML+XSLT就可以直接输出到支持XML的浏览器上,如IE 5.0以上,但是,我们还要考虑到有不少浏览器不直接支持XML,在这种情况下,我们需要在服务器上进行转换成html输出到浏览器,这种临时过渡办法恐怕要在一段时间内一直要使用. 使用Jsp 加上tablib标识库,我们可以完成这种转换。 著名open source项目组jakarta.apache.org...
标签: Web开发
在企业信息系统日常使用过程中经常需要处理一些平面文件,有些可能是通过网站平台传到统一的文档服务器进行管理,有些可能会有专门的文档管理应用系统。在这些系统的使用过程中经常需要添加一些文档的附属信息,比如上传上员,上传时间,文件的用途等。 虽然专业的文档系统可以使文档的管理变得非常简单高效,但是还是有一部分人需要...

经验教程

215

收藏

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