欢迎光临

木子屋

标题: 如何生成XML数据

作者: dnawo

日期: 2007-08-01 11:50 AM

分类: HTML/CSS

内容: 一、必须弄清楚最终需要的是什么
我们通过asp或其他动态编程语言，最终需要的是XML格式的数据，这点和XML数据所在的文件载体无关，它可以是实实在在的XML文件，比如：http://www.dw8.cn/common/dw8.xml 。也可以为asp文档，比如：http://www.cnbruce.com/blog/rss2.asp
他们都是XML数据的体现，为了实现XML数据的动态，所以需要使用到动态编程语言，比如ASP来实现生成它。
二、如何生成动态的XML文档
如果是生成XML文件，介于动态文档是ASP格式的，所以必须借助FSO进行XML文件的生成，比如：
复制内容到剪贴板 程序代码<%
xmlfile=server.mappath("test1.xml")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile(xmlfile,True)
MyFile.WriteLine("<?xml version=""1.0"" encoding=""gb2312""?>")
MyFile.WriteLine("<世界>")
MyFile.WriteLine("<你好>hello,world</你好>")
MyFile.WriteLine("</世界>")
MyFile.Close
%>
<a href="test1.xml">查看XML文件内容</a>
有关FSO的操作参看
http://www.cnbruce.com/blog/showlog.aspcat_id=26&log_id=440
如果按照生成动态的XML数据文件来说，则是将MyFile.WriteLine的相关内容在动态文档中通过程式的手段来控制XML节点的名称和值即可。
三、如何使用动态文档生成XML数据
那如果不是生成XML文件，直接在动态文档上输出XML数据呢，须声明文件的类型(即Response.ContentType)
复制内容到剪贴板 程序代码<%Response.ContentType = "text/XML"%>
比如直接浏览如下的动态ASP文档，在浏览器中下则显示为XML数据树
复制内容到剪贴板 程序代码<%
With Response
.ContentType = "text/XML"
.write("<?xml version=""1.0"" encoding=""gb2312""?>")
.write("<世界>")
.write("<你好>hello,world</你好>")
.write("</世界>")
End with
%>
生成的XML文件，其优势就是处理该XML数据的文档可以是静态文档，比如HTML文件通过Javascript、XMLDOM来解析XML，同时也易于数据的保留，而动态文档上的动态XML数据则没有这样有点。不过，在如今动态文档无处不在用的时代，似乎这个优势对于一些应用来说是无甚影响，甚至来说，动态文档的XML数据流反而更具优势：更及时、更动态。
四、生成XML数据就是这样行了吗？
无论是通过生成具体的XML文件，还是动态的XML数据流，只要按照XML的格式输出相关XML节点和值就可以了，这样看来XML似乎很简单。但这并没有真正接触到XML的操作。在我们看来，这些XML无非就是一些成对的标签和相关字符组成的数据记录，毫无生命力可言。然而事实上，通过XMLDOM来操作XML则显示了XML的绝对优势(这点在生成XML时优势不明显，却在添加、删除XML节点时体验无限)。
使用XMLDOM创建XML文档，可使用Save方法生成XML文档，使用createElement方法创建XML元素、createNode创建节点，其实对于XML中的任何标签的创建都可以任意选择其中的一种，不过一般使用createElement创建顶层(根)元素，使用createNode创建子节点(元素)，当然createElement和createNode的使用方法也是不同。
复制内容到剪贴板 程序代码<%
Set objXMLdoc = CreateObject("Microsoft.XMLDOM")
Set world=objXMLdoc.createElement("世界")
objXMLdoc.appendChild(world)
Set hello=objXMLdoc.createNode("element", "你好", "")
hello.Text = "hello,world"
objXMLdoc.documentElement.appendChild(hello)
objXMLdoc.Save Server.MapPath("test2.xml")
Set objXMLdoc = Nothing
%>
1.CreateObject("Microsoft.XMLDOM") 声明使用XMLDOM对象
2.在元素或节点被建立(createElement、createNode)时，其并没有加到文件树中，若要将节点加到文件树中，则需要插入，如appendChild。
3.xmlDocument.createNode(type, name, nameSpaceURI) 表示建立一个指定型态、名称，及命名空间的新节点
type 用来确认要被建立的节点型态，name 是一个字符串来确认新节点的名称，命名空间的前缀则是选择性的。nameSpaceURI 是一个定义命名空间URI 的字符串。如果前缀被包含在名称参数中，此节点会在nameSpaceURI 的内文中以指定的前缀建立。如果不包含前缀，指定的命名空间会被视为预设的命名空间。
objXMLdoc.createNode("element", "你好", "") 等同于
objXMLdoc.createElement("你好")
4.objXMLdoc.documentElement.appendChild(hello)其实就是XML文档根元素下建立节点，在本例中等同于 world.appendChild(hello)，world为本例中的节点名，以此类推。
所以可以这样来写：
复制内容到剪贴板 程序代码<%
Set objXMLdoc = CreateObject("Microsoft.XMLDOM")
Set world=objXMLdoc.createElement("世界")
objXMLdoc.appendChild(world)
Set hello=objXMLdoc.createElement("你好")
hello.Text = "hello,world"
world.appendChild(hello)
objXMLdoc.Save Server.MapPath("test2.xml")
Set objXMLdoc = Nothing
%>
需要注意的是，通过XMLDOM生成的XML文件都是UTF-8格式的，这对我们所有应用程序文件的UTF-8化作了很好的推介。
总结
生成XML数据，可以使用FSO，如FSO被禁用，可使用XMLDOM，当然还可以直接使用动态文档。不过如果融会贯通地掌握XML的操作，XMLDOM操作是必须的。

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.707 ms

返回

标题: 如何生成XML数据

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.707 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.734 ms

返回