ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4062|回复: 9

[讨论] 关于xml的讨论

[复制链接]

TA的精华主题

TA的得分主题

发表于 2003-12-12 22:54 | 显示全部楼层 |阅读模式
office从2003版开始支持xml,在我们这里所用的增值税申报系统导入导出也用的是xml
格式,看来xml是不学不行了,请大家讨论一下站在数据处理的角度,学习xml的关键所在。

TA的精华主题

TA的得分主题

发表于 2003-12-13 06:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
xml已经成为office的标准格式了,当然必须得学,Ado.net中取代Recordset的Dataset实际上也是xml,可见xml的重要
http://bbs.xml.org.cn/index.asp
去这里学习一下吧

TA的精华主题

TA的得分主题

发表于 2003-12-13 07:01 | 显示全部楼层
S00WJXmV.rar (34.16 KB, 下载次数: 196)
找到一本xml学习的材料,有兴趣的朋友可以看看

TA的精华主题

TA的得分主题

 楼主| 发表于 2003-12-15 00:21 | 显示全部楼层
在Visual Basic 6.0中操纵XML文件

            2002-10-17· ·crystal编译··yesky


            1 2 3  下一页
              什么是XML

              扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

              XML与Access,Oracle和SQL
            Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。事实上XML与其他数据表现形式最大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。

              XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac
            OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。

              XML的优点

              我们谈到XML长于在不同的应用程序之间交换数据,XML文件也便于构建小的数据库,不久以前,软件都使用INI文件存储配置信息、用户参数以及其他信息,后来微软引入了系统注册表,接作微软告诉我们不应该再使用INI文件了,从那时起Visual
            Basic对INI文件的支持被削弱了。但不幸的是注册表有几个致命的缺点:不是简单的文本文件,难于读写、可能会变得庞大和缓慢、如果注册表不知何故出现问题,将有可能造成系统死机。

              将配置信息放在XML文件中可以避免这些问题,甚至可以将XML文件设置为一个共享文件,这样在不同的计算机上的用户就可以共享数据,这是注册表所不能比拟的。

              在被称为下一代ASP的ASP.NET中可以在WEB页中直接使用XML,你可以使用数据绑定控件直接绑定数据并自动显示。

              当然也可以不选择XML,使用文本文件、注册表、数据库都可以完成XML所能完成的任务,XML只是你在数据存储和恢复的另一种工具而已。

              XML语法简介

              XML的语法非常的简单,XML文档由节点组成,使用打开和关闭节点描述标记,在格式上与HTML标记非常相似,它们之间最大的不同是:XML中可以自由定义标记名。比如下面的标记就描述了一个电话号码:

              <Phone>987-654-3210</Phone>

              而且不用声明标记名就可以使用。

              开始和结束标记必须相同,XML是识别大小写的,所以标记的大小写也必须相同。比如上面的例子中以<Phone>标记开始就必须以</Phone>标记结束,而不能是</phone>或</PHONE>

              节点标记中可以包含属性,比如下面的代码中Phone节点包含属性Type,其值为WorkFax:

              <Phone Type="WorkFax">987-654-3210<Phone>

              如果不愿意在节点中包含一个值,那么可以不需要结束标记,可以用在开始标记的后面加一个斜线来结束节点,在下面的例子中,Phone标记的Number属性就存储了一个电话号码,所以就不需要一个结束标记:

              <Phone Type="WorkFax" Number="987-654-3210" />

              XML文档的结构是一个树形等级结构。文档必须有一个唯一的根结点,根节点包含所有其它节点。下面我们举一个较为完整的例子:

                  <Addresses>
                   <Entry Type="Personal">
                    <FirstName>Andy</FirstName>
                    <LastName>Fickle</LastName>
                    <Street>1234 Programmer Place</Street>
                    <City>Bugsville</City>
                    <State>CO</State>
                    <Zip>82379</Zip>
                    <Phone Type="Home">354-493-9489</Phone>
                   </Entry>
                   <Entry Type="Work">
                    <FirstName>Betty</FirstName>
                    <LastName>Masterson</LastName>
                    <Phone Type="Work">937-878-4958</Phone>
                    <Phone Type="WorkFax">937-878-4900</Phone>
                   </Entry>
                   ...
                  </Addresses>

              注意相似的节点不需要包含相同的信息,例如第一个Entry节点包含了地址信息和家庭电话号码,第二个Entry节点包含了Work和WorkFax电话号码,而没有包含第一个Entry节点包含的信息。

              XML工具

              如前面的例子显示,XML语法是如此的简单以至于你可以在很短的时间作一个XML解析器,幸运的是你不必这样做,因为XML工具可以运行在各种平台上,包括可以安装了Visual
            Basic的Windows。

              正是这些L工具而不是XML本身使XML变得更强大和复杂。不同的解析器使你可以某一时刻加载整个XML文档或只加载某个节点,与此相反,XML
            Writer 可以同时创建一个XML文档和节点。

              DOM解析器使我们能够很方便的加载、复制、排序、修改和存储XML文件,遍历节点获得名称或属性,并给结果排序。虽然他们的功能没有真正的关系数据库强大,但DOM的这些特点依然非常有用。

              XSD可以定义XML文档的格式,XSL扩展样式单定义了怎样将XML文档转换成其他可以在WEB浏览器中浏览的文件格式,比如HTML文件。

              这些工具实际上比XML本身更复杂,所以所有讲解XML的书籍都花了很大的篇幅解释这些XML工具。但这超出了本文的范围,有兴趣的读者可以参考有关资料。

              Visual
            Basic.Net提供了使用XML、XSL以及其他XML工具的完整工具。但不用等待VB.NET,微软XML核心服务(MSXML)版本4.0提供了从Visual
            Basic6.0加载和存储XML文档的工具。

              在msdn.microsoft.com/xml/default.asp中下载最新版本的MSXML,并安装在计算机上。在Visual
            Basic 6.0中使用Microsoft XML V4.0象引用其他对象一样,首先在工程菜单中选择引用菜单项,选择Microsoft
            V4.0,单击OK,一切完成后就现在就可以在VB应用程序中添加XML对象了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2003-12-15 00:22 | 显示全部楼层
在Visual Basic 6.0中操纵XML文件

            2002-10-17· ·crystal编译··yesky


            
              DOMDocument 类

              文档对象模型(DOM)使用了一系列相应的对象描述了XML文档的等级状态,DOMDocument类是一个描绘XML文档的DOM结构的MSXML类。

              DOMDocument类仅仅提供了很少的几个有用的属性和方法。Load方法载入一个xml文件,loadxml方法将字符串作为xml数据添加到对象中。例如,下面的代码就将一个小的xml文件添加到名为xml_document的文档中。

                  Dim xml_document As New DOMDocument

                  xml_document.loadXML _
                  "<Person>" & vbCrLf & _
                  " <FirstName>Rod</FirstName>" & vbCrLf & _
                  " <LastName>Stephens</LastName>" & vbCrLf & _
                  "</Person>"


              DOMDocument的xml属性返回文档的xml描述,可以显示这些返回值看看这些文档究竟是什么样子,也可以将它存储为一个文件,但这完全不必要,因为DOMDocument对象的save方法已经自动将他们存储了。

              DOMDocument对象的documentElement属性表示文档数据的根结点,通常情况下操作XML文档都从这里开始。

              DOMDocument提供了几种创建新节点的方法。CreateElement方法为文档创建一个新的元素节点,其他创建节点的方法有createAttribute,
            createProcessingInstruction, 和 createTextNode,在这里就不一一介绍了。

              IXMLDOMNode类

              IXMLDOMNode类描述了一个节点,该类提供了一系列用于搜索和操纵XML文档的属性和方法。
            selectSingleNode
            方法用于搜索指定节点的后代,用于搜索指定节点路径的语言称为XPATH,XPATH非常棘手,本文就不详细说明其规范了。下面我们将介绍两个对搜索子节点有特别有用并且简单的方法。

              在给selectsingleNode方法中输入子节点的名字,该方法将在节点的子节点进行精确匹配搜索。如果在输入的字符串前面加上".//",那么将搜索节点的全部后代。

                  ' Search for a child node named "LastName."
                  Set last_name_node = address_node.selectSingleNode("LastName")

                  ' Search for any descendant named "LastName."
                  Set last_name_node =
                  address_node.selectSingleNode(".//LastName")

              下面列出了IXMLDOMNode对象的部分非常有用的属性:

               attributes.节点属性集合

               nodeName.节点的标记名

               nodeTypeString.节点的类型

               ownerDocument.返回DOMDocument对象包含的节点

               text.表示节点包含的文本内容。如果该节点包含其他节点,那么text代表了所有节点的文本内容的组合。

               xml.给出了节点的xml内容,例如:"<FirstName>Rod</FirstName>".

              ChildNodes集合包含了节点的子节点。要给节点增加一个子节点,首先必须给使用DOMDocument对象的节点创建方法,然后将这个新建的节点加入到父节点的childNodes集合中。下面的代码展示了创建一个新的子节点的子程序,并使用父节点的appendChild方法将其加入到父节点中:

                  ' Add a new node to the indicated parent node.
                  Private Sub CreateNode(ByVal indent As Integer, _
                  ByVal parent As IXMLDOMNode, ByVal node_name As String, _
                  ByVal node_value As String)
                  Dim new_node As IXMLDOMNode

                  ' Create the new node.
                  Set new_node = parent.ownerDocument.createElement(node_name)

                  ' Set the node's text value.
                  new_node.Text = node_value

                  ' Add the node to the parent.
                  parent.appendChild new_node
                  End Sub
                  SaveValues 程序

              现在我们可以使用XML创建一个简单的程序(如图1),其值存储到XML文件中,在程序开始运行时,程序从VALUE.XML文件中加载数据,在程序运行结束时,将程序中的现行值存入VALUE.XML文件中。



              下面的代码是显示了VALUE.XML文件的结构:

                  <Values>
                   <FirstName>Rod</FirstName>
                   <LastName>Stephens</LastName>
                   <Street>1234 Programmer Place</Street>
                   <City>Bugsville</City>
                   <State>CO</State>
                   <Zip>80276</Zip>
                  </Values>

              List1显示了怎样编写SaveValues,当载入表单时,form_load事件触发LoadValues子程序。
            LoadValues创建了一个名为xml_document的DOMDocument对象,然后载入xml文件,使用selectSingleNode方法查找名为values的节点,然后使用GetNodeValue方法获得从value节点后代中得到的值。

              GetNodeValue使用value节点的selectSingleNode方法寻找目标节点,如果节点不存在函数将返回一个缺省值,如果找到这个节点GetNodeValue将返回该节点的text值。对于value.xml文件中的数据节点,text仅仅是包含在节点中的文本内容。

              当窗体卸载时触发form_unload事件,unload事件调用SaveValues子程序。程序创建一个新的DOMDocument对象,该对象创建一个新的名为value的节点,然后用文档的appendChild方法将节点添加到文档中。

              在创建所有新的节点后,SaveValues调用DOMDocument's save方法存储新的xml文件。

              注意这个新的文件已经覆盖了旧文件,使用DOMDocument对象无法部分改变XML文件,可以加载XML文件,然后修改其中一部分,然后保存文件,但原文件将被完全覆盖。这是一个小的缺陷,但在这时可以使用其它程序进行修改。

              List1的最后一部分是CreateNode子程序,CreateNode
            为父节点创建一个新节点并同时给这个节点赋值。在这个子程序中首先引用一个DOMDocument对象,然后使用该对象的createElement方法创建一个新的节点。

              createNode方法设置节点的text属性,然后将节点作为子节点添加到父节点中。

            List1:

                  Option Explicit

                  Private m_AppPath As String

                  Private Sub Form_Load()
                  ' Get the application's startup path.
                  m_AppPath = App.Path
                  If Right$(m_AppPath, 1) <> "\" Then m_AppPath = m_AppPath &
"\"

                  ' Load the values.
                  LoadValues
                  End Sub

                  Private Sub Form_Unload(Cancel As Integer)
                  ' Save the current values.
                  SaveValues
                  End Sub

                  ' Load saved values from XML.
                  Private Sub LoadValues()
                  Dim xml_document As DOMDocument
                  Dim values_node As IXMLDOMNode

                  ' Load the document.
                  Set xml_document = New DOMDocument
                  xml_document.Load m_AppPath & "Values.xml"

                  ' If the file doesn't exist, then
                  ' xml_document.documentElement is Nothing.
                  If xml_document.documentElement Is Nothing Then
                  ' The file doesn't exist. Do nothing.
                  Exit Sub
                  End If

                  ' Find the Values section.
                  Set values_node = xml_document.selectSingleNode("Values")

                  ' Read the saved values.
                  txtFirstName.Text = GetNodeValue(values_node, "FirstName",
                  "???")
                  txtLastName.Text = GetNodeValue(values_node, "LastName",
"???")
                  txtStreet.Text = GetNodeValue(values_node, "Street", "???")
                  txtCity.Text = GetNodeValue(values_node, "City", "???")
                  txtState.Text = GetNodeValue(values_node, "State", "???")
                  txtZip.Text = GetNodeValue(values_node, "Zip", "???")
                  End Sub

                  ' Return the node's value.
                  Private Function GetNodeValue(ByVal start_at_node As
                  IXMLDOMNode, _
                  ByVal node_name As String, _
                  Optional ByVal default_value As String = "") As String
                  Dim value_node As IXMLDOMNode

                  Set value_node = start_at_node.selectSingleNode(".//" &
                  node_name)
                  If value_node Is Nothing Then
                  GetNodeValue = default_value
                  Else
                  GetNodeValue = value_node.Text
                  End If
                  End Function

                  ' Save the current values.
                  Private Sub SaveValues()
                  Dim xml_document As DOMDocument
                  Dim values_node As IXMLDOMNode

                  ' Create the XML document.
                  Set xml_document = New DOMDocument

                  ' Create the Values section node.
                  Set values_node = xml_document.createElement("Values")

                  ' Add the Values section node to the document.
                  xml_document.appendChild values_node

                  ' Create nodes for the values inside the
                  ' Values section node.
                  CreateNode values_node, "FirstName", txtFirstName.Text
                  CreateNode values_node, "LastName", txtLastName.Text
                  CreateNode values_node, "Street", txtStreet.Text
                  CreateNode values_node, "City", txtCity.Text
                  CreateNode values_node, "State", txtState.Text
                  CreateNode values_node, "Zip", txtZip.Text

                  ' Save the XML document.
                  xml_document.save m_AppPath & "Values.xml"
                  End Sub

                  ' Add a new node to the indicated parent node.
                  Private Sub CreateNode(ByVal parent As IXMLDOMNode, _
                  ByVal node_name As String, ByVal node_value As String)
                  Dim new_node As IXMLDOMNode

                  ' Create the new node.
                  Set new_node = parent.ownerDocument.createElement(node_name)

                  ' Set the node's text value.
                  new_node.Text = node_value

                  ' Add the node to the parent.
                  parent.appendChild new_node
                  End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2003-12-15 00:23 | 显示全部楼层
在Visual Basic 6.0中操纵XML文件

            2002-10-17· ·crystal编译··yesky


           
              SaveValuesIndented 程序

              虽然每个人都化了很大的精力去处理xml文档,使他们看上更容易些,但xml工具一般都忽略了那些使xml文档结构明显的空白和缩进,xml解析器也同样忽略缩进和空白。

              不幸的是我们例子也同样忽略了这些缩进和空白,SaveValues创建了一个象下面那样的xml文件,所有的代码都在同一行中。

                  <Values><FirstName>Rod</FirstName><LastName>Stephens</LastNa
                  me><Street>1234 Programmer Place</Street><City>Bugsville</Ci
                  ty><State>CO</State><Zip>80276</Zip></Values>

              VB.NET中包括了文本写入类,可以XML文档规定格式。但MSXML重没有这种功能,所以如果需要以一种清晰的格式保存XML文件,只能另行添加它的格式。

              List2列出了程序SaveValuesIndented使用的代码,SaveValues子程序与上面例子中讲的几乎完全相同,但他在创建value节点后同时给XML文档创建了一个<value>标记的新行。

              然后SaveValues
            调用CreateNode创建一个新的数据节点,但在这里它传递给CreateNode一个新的参数,这个参数表示这个新节点的缩进方式。

                  CreateNode
                  ' Save the current values.
                  Private Sub SaveValues()
                  Dim xml_document As DOMDocument
                  Dim values_node As IXMLDOMNode

                  ' Create the XML document.
                  Set xml_document = New DOMDocument

                  ' Create the Values section node.
                  Set values_node = xml_document.createElement("Values")

                  ' Add a new line.
                  values_node.appendChild xml_document.createTextNode(vbCrLf)

                  ' Add the Values section node to the document.
                  xml_document.appendChild values_node

                  ' Create nodes for the values inside the
                  ' Values section node.
                  CreateNode 4, values_node, "FirstName", txtFirstName.Text
                  CreateNode 4, values_node, "LastName", txtLastName.Text
                  CreateNode 4, values_node, "Street", txtStreet.Text
                  CreateNode 4, values_node, "City", txtCity.Text
                  CreateNode 4, values_node, "State", txtState.Text
                  CreateNode 4, values_node, "Zip", txtZip.Text

                  ' Save the XML document.
                  xml_document.save m_AppPath & "Values.xml"
                  End Sub

                  ' Add a new node to the indicated parent node.
                  Private Sub CreateNode(ByVal indent As Integer, _
                  ByVal parent As IXMLDOMNode, ByVal node_name As String, _
                  ByVal node_value As String)
                  Dim new_node As IXMLDOMNode

                  ' Indent.
                  parent.appendChild _
                  parent.ownerDocument.createTextNode(Space$(indent))

                  ' Create the new node.
                  Set new_node = parent.ownerDocument.createElement(node_name)

                  ' Set the node's text value.
                  new_node.Text = node_value

                  ' Add the node to the parent.
                  parent.appendChild new_node

                  ' Add a new line.
                  parent.appendChild parent.ownerDocument.createTextNode(vbCrLf)
                  End Sub


              结论

              本文仅仅揭示XML编程的表面,本文的例子中的涉及只是非常简单的XML文件,但你可以使用使用本文揭示的技术做更多的事情,比如配置设置、表单位置、以及其他信息。XML已经向前更进一步的发展了,有了更复杂的数据层次。对于更复杂的数据结构,在运行时可以更容易的使用MSXML对象来存取XML文件

TA的精华主题

TA的得分主题

发表于 2014-2-4 23:51 | 显示全部楼层
hzg7818 发表于 2003-12-13 07:01
找到一本xml学习的材料,有兴趣的朋友可以看看

感谢分享!!

TA的精华主题

TA的得分主题

发表于 2014-2-7 14:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-4-1 19:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-2-2 21:29 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 11:34 , Processed in 0.043025 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表