您现在的位置:首页 >> 网络教学 >> WEB编程技术 >> 内容

VB与XML

时间:2009-6-19 10:53:32 点击:5511

一、XML简介

(一)什么是XML

因为现在网络应用越来越广泛,仅仅靠HTML单一文件类型来处理千变万化的文档和数据已经力不丛心,而且HTML本身语法十分不严密,严重影响网络信息传送和共享。人们早已经开始探讨用什么方法来满足网络上各种应用的需要。此时引人了SGML(Standard Generalized Markup Language通用标识语言标准,一种比HTML更早的标志语言标准),人们发现,使用SGML是可以的,SGML的覆盖面很广,凡是有一定格式的文件都属于SGML,比如报告,乐谱等等,HTMLSGML在网络上最常见的文件格式。但是SGML太庞大,编程复杂,于是最终选择了"减肥"SGML---XML作为下一代web运用的数据传输和交互的工具。

XML来源于SGML(Standard Generalized Markup Language通用标识语言标准,一种比HTML更早的标志语言标准),也就是说所有标志语言都是依照SGML制定的,当然包括HTML。而XML就是SGML的简化版,只不过省略了其中复杂和不常用的部分。

XMLExtensible Markup Language的简写,一种扩展性标识语言。 这是标准的定义。对HTML你已经熟悉了它是一种标记语言 (Hypertext Markup Language" 超文本标记语言),同时,HTML里面有很多标签,都是在HTML 4.0里规范和定义,而XML里允许你自己创建这样的标签,既可扩展性。和SGML一样,XML也可以应用在金融,科研等各个领域,我们这里讲的,只是XMLweb方面的运用而已。

(二)简单的XML文档

下面就是一段XML示例文档,用来表示本文的信息:

<myfile><br><br>

<title>XML Start</title><br><br>

<author>abc</author><br><br>

<email>abc@abc.com</email><br><br>

<date>20080515</date><br><br>

</myfile>

注意: .其中类似< title>,<author>的语句就是自己创建的标记(tags),它们和HTML标记不一样,例如这里的<title>是文章标题的意思,HTML里的<title>是页面标题。

若熟悉HTML,则会发现它的文档和HTML非常相似,看同样的示例文档:

<?xml version="1.0"?><br><br>

<myfile><br><br>

<title>XML Start</title><br><br>

<author>abc</author><br><br>

<email>abc@abc.com</email><br><br>

<date>20080515</date><br><br>

</myfile>

第一行是一个XML声明,表示文档遵循的是XML1.0 版的规范。

第二行定义了文档里面的第一个元素(element),也称为根元素: <myfile>。这个就类似HTML里的<HTML>开头标记。注意,这个名称是自己随便定义的。

再下面定义了四个子元素:title,author,email,date。分别说明文章的标题,作者,邮箱和日期。当然,你可以用中文来定义这些标签,看上去更便于理解:

<?xml version="1.0" encoding="GB2312"?>

<文章>

<标题>XML轻松学习手册</标题>

<作者>abc</作者>

<信箱>abc@abc.com</信箱>

<日期>20080515</日期>

</文章>

这就是简单的XML文档。

二、XML 基础

(一)XML的基本概念

1.元素元素就是文档的组件,元素可由其他元素、其他类型数据等组成。

元素的关系:

XML必须有根元素,好比是HTML中的<html>元素一样。因XML元素名称可自定义,所有名称最好能与内容有逻辑上的关联。

元素命名规则:

元素的命名上不像HTML有固定的要求,XML元素的名称可以自定义,但要注意名称不能含有空格和":"符号。

2.属性属性可以包含元素额外的信息。

弱点:

1).不能含多重数值

2).扩展能力有限

3).不能描述结构内容

4).难以用DTD进行测试

3.文档类型定义文档类型定义(DTD)是关于标记符号使用的语法规则。(明确文档中标记符号的使用)

4.模式(Schema)

DTD有点类似,不同的是它可以定义元素内使用数据的类型

5.命名空间(Namespace)

XML可自定义元素名称,为了防止各用户使用的名称出现重复而又代表不同的内容,就得用到命名空间。

6.CSSXSL

XML的内容与表现形式是分开的,用户可以根据自己的需要来定义表现形式

CSS可以表现HTMLXML文件

XSL可以表现XML文件以及语言转形(XSLTransformation

两者各有特点,可相互补充

7.链接

目前HTML的链接只能做到单一方向,而不能到达某一特殊的位置,也无法轻易创建外部页间的链接。

XML的链接包括:

Xpath 主要目的是进行部分而不是整个XML文档的实际寻址

XLink 利用XML句法创建结构来描述目前的HTML的单向链接以及更复杂的多端和多类型的链接。XLink的重要部分是定义两个或多个数据对象或对象部分之间的关系

XPointer 建立在Xpath的基础上以支持到XML文档的内部结构中的寻址。因此可以使用XML标记联接到另一个文档的特殊部分而不必提供ID引用

8.DOM(文档对象模型)

XML文档对象模型将XML文档的内容实现为对象模型。

要使用DOM得有相应的解析器。VBscriptIE可以用CreateObject方法来实现:

set objParser = CreateObject("Microsoft.XMLDOM")

如使用的是ASP:

set objParser = Server.CreateObject("Microsoft.XMLDOM")

(二)XML的结构

1.XML的数据结构,命名空间

命名空间允许开发人员在可识别的情况下定义元素的名称,以避免同名元素间产生冲突。

2.数据发送,处理

由于XML是基于开发式和文本式的,所以它能够通过HTTPHTML那样传输。

桌面上的数据可以用DOM处理,这是使得数据服务器上数据的变化能传递给客户,反过来也一样。

3.解析XML

IE5中的XML解析器能够读入一串XML数据,经过处理产生一棵结构树,并可使用DOM把所有数据元素作为对象解析器,用CSSXSL样式表显示数据或者用脚本把数据进行进一步的处理或者把数据移交给另外的应用软件或对象进行进一步的处理。DOM用扩展方式支持命名空间数据类型查询和XSL转化

4.使用文档对象模式DOM处理和编辑数据

DOM实际上是一个应用编程接口,用来定义一种标准方法,通过这种方法开发人员能够处理XML结构树的元素。对象模式控制着使用者如何同结构树交流并且把所有树的元素作为对象表现出来

5.HTML显示XML数据

XML文档自身不能决定如何显示信息而HTML是一个理想的显示语言。

数据捆绑和样式表可以用来把XML数据组织成形象化的表达形式并加上交互功能。

XSL能够进一步加强这一过程,一个XSL样式表包括如何从XML文档中取出信息以及如何把它转变为另一种格式的指令。XML转变为另一种格式比如HTML采用的是一种公布了的方法这比采用脚本编写简单而且容易理解,另外XSLXML作为它的语法使XML的编写者不用去掌握另外的标识语言。

CSS仍然被应用于结构简单的XML数据并且也很有用,但是CSS不提供与数据源结构不同的数据显示结构。使用XSL可以产生与原来的XML数据结构完全不同的表达结构,XSL提供内容和表现形式的语义和结构独立性

6.增加HTML

HTML页增加语义信息并不容易,为了解决这一问题W3C定义了一个格式用来把基于XML的数据放到HTML页中,通过使用数据岛(data islands)扩展HTML,允许很大范围的应用软件使用HTML作为主要文档和显示格式并且使用这些文档中内含的XML保存数据。

7.转换和查询XML

XML语法XSLXSL模式语言提供了满足XML转换和查询所需要的方法。XSL模式是简明的语法用来识别XML文档的节点,它还提供了一种能将XML的数据从一种模式转换成另外一种模式。

8.设置字符和编码

9.空格符

HTML中空格符是会被忽略的,XML是描述数据的语言,可以使用xml:space属性来保留空格。

三、如何通过VB处理XML

首先要引用一个Microsoft XML ,在初始化的时候读取XML显示到TXTBOX中,代码如下:

'通过2进制流将XML文件读出来,也可以是其它文件格式

Private Function pstrUpdateView(istrXMLPath As String) As String

    Dim wlngFreeFile As Long

    Dim wbytwbytLoadBytes() As Byte

     '获得一个空闲文件号

     wlngFreeFile = FreeFile

     Open istrXMLPath For Binary As #wlngFreeFile

    ReDim wbytLoadBytes(1 To LOF(wlngFreeFile)) As Byte

    Get #wlngFreeFile, , wbytLoadBytes

     Close wlngFreeFile

     pstrUpdateView = StrConv(wbytLoadBytes, vbUnicode)

End Function

装载XML传进去一个XML地址如果装载不成功就error成功则执行下一步

Private Sub fsubLoadXML(istrXMLPath As String)

    Set pobjXMLDoc = CreateObject("MSXML2.DOMDocument")

    If pobjXMLDoc.Load(istrXMLPath) = False Then

        On Error GoTo LoadXMLErr:

    End If

    On Error GoTo 0

    Exit Sub

LoadXMLErr:

    Dim myErr

    Set myErr = pobjXMLDoc.parseError

    MsgBox ("ERROR" & myErr.reason)

    Set myErr = Nothing

End Sub

读属性DOMDocument对象里有2个读节点的方法

selectNodes() 如果根节点下有多个子节点就要用这个方法item定义了第几个子节点

selectSingleNode()如果根节点下只有一个字节点可以用这个方法

Private Function fstrReadAttr(istrNodes As String, istrAttribute As String) As String

On Error GoTo ErrHandle:

    Dim wobjXmlAttr As MSXML2.IXMLDOMAttribute

'  Set wobjXmlAttr = pobjXMLDoc.selectNodes(istrNodes).Item(0).Attributes.getNamedItem(istrAttribute)

    '  Set wobjXmlAttr = pobjXMLDoc.selectSingleNode(istrNodes).Attributes.getNamedItem(istrAttribute)

     fstrReadAttr = wobjXmlAttr.Text

    'destroy object

    Set wobjXmlAttr = Nothing

    On Error GoTo 0

    Exit Function

ErrHandle:

    MsgBox Err.Description

    Set wobjXmlAttr = Nothing

End Function

读节点 call fstrReadNode("/test/user") ,参数是test节点下的user子节点

Private Function fstrReadNode(istrNodes As String) As String

    Dim xNode As MSXML2.IXMLDOMNode

    Set xNode = pobjXMLDoc.selectSingleNode(istrNodes)

     fstrReadNode = xNode.Text

    Set xNode = Nothing

End Function

写节点参数1节点参数2需要写入的值

Private Sub fsubWriteNode(istrNodes As String, istrValue As String)

    Dim wobjXMLNode As IXMLDOMElement

    Set wobjXMLNode = pobjXMLDoc.documentElement.selectNodes(istrNodes).Item(0)

     wobjXMLNode.Text = istrValue

      Set wobjXMLNode = Nothing

End Sub

作者:Admin  
  • 上一篇:VB与DHTML
  • 下一篇:WEB编程技术小结
  • 本类热门
    本类推荐
    本类固顶
    • 没有
  • VB程序设计学习网站(赣南师范学院) © 2008 版权所有 All Rights Reserved.
  • 地址:江西省赣州市经济技术开发区 赣南师范学院数学与计算机科学学院 邮政编码:341000
    Email:ZQ188@163.com 技术支持QQ:87319633 移ICP备10086号
  • GnsySjxy! V2.4