利用VB操作XML数据Word格式文档下载.docx

上传人:b****6 文档编号:8594848 上传时间:2023-05-12 格式:DOCX 页数:10 大小:21.21KB
下载 相关 举报
利用VB操作XML数据Word格式文档下载.docx_第1页
第1页 / 共10页
利用VB操作XML数据Word格式文档下载.docx_第2页
第2页 / 共10页
利用VB操作XML数据Word格式文档下载.docx_第3页
第3页 / 共10页
利用VB操作XML数据Word格式文档下载.docx_第4页
第4页 / 共10页
利用VB操作XML数据Word格式文档下载.docx_第5页
第5页 / 共10页
利用VB操作XML数据Word格式文档下载.docx_第6页
第6页 / 共10页
利用VB操作XML数据Word格式文档下载.docx_第7页
第7页 / 共10页
利用VB操作XML数据Word格式文档下载.docx_第8页
第8页 / 共10页
利用VB操作XML数据Word格式文档下载.docx_第9页
第9页 / 共10页
利用VB操作XML数据Word格式文档下载.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

利用VB操作XML数据Word格式文档下载.docx

《利用VB操作XML数据Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《利用VB操作XML数据Word格式文档下载.docx(10页珍藏版)》请在冰点文库上搜索。

利用VB操作XML数据Word格式文档下载.docx

开始和结束标记必须相同,XML是识别大小写的,所以标记的大小写也必须相同。

比如上面的例子中以<Phone>标记开始就必须以</Phone>标记结束,而不能是</phone>或</PHONE>

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

<PhoneType="

WorkFax"

>987-654-3210<Phone>

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

Number="

987-654-3210"

/>

XML文档的结构是一个树形等级结构。

文档必须有一个唯一的根结点,根节点包含所有其它节点。

下面我们举一个较为完整的例子:

<Addresses>

<EntryType="

Personal"

<FirstName>Andy</FirstName>

<LastName>Fickle</LastName>

<Street>1234ProgrammerPlace</Street>

<City>Bugsville</City>

<State>CO</State>

<Zip>82379</Zip>

<PhoneType="

Home"

>354-493-9489</Phone>

</Entry>

Work"

<FirstName>Betty</FirstName>

<LastName>Masterson</LastName>

>937-878-4958</Phone>

>937-878-4900</Phone>

...

</Addresses>

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

XML工具

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

正是这些L工具而不是XML本身使XML变得更强大和复杂。

不同的解析器使你可以某一时刻加载整个XML文档或只加载某个节点,与此相反,XMLWriter可以同时创建一个XML文档和节点。

DOM解析器使我们能够很方便的加载、复制、排序、修改和存储XML文件,遍历节点获得名称或属性,并给结果排序。

虽然他们的功能没有真正的关系数据库强大,但DOM的这些特点依然非常有用。

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

这些工具实际上比XML本身更复杂,所以所有讲解XML的书籍都花了很大的篇幅解释这些XML工具。

但这超出了本文的范围,有兴趣的读者可以参考有关资料。

VisualBasic.Net提供了使用XML、XSL以及其他XML工具的完整工具。

但不用等待VB.NET,微软XML核心服务(MSXML)版本4.0提供了从VisualBasic6.0加载和存储XML文档的工具。

在Basic6.0中使用MicrosoftXMLV4.0象引用其他对象一样,首先在工程菜单中选择引用菜单项,选择MicrosoftV4.0,单击OK,一切完成后就现在就可以在VB应用程序中添加XML对象了。

DOMDocument类

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

DOMDocument类仅仅提供了很少的几个有用的属性和方法。

Load方法载入一个xml文件,loadxml方法将字符串作为xml数据添加到对象中。

例如,下面的代码就将一个小的xml文件添加到名为xml_document的文档中。

Dimxml_documentAsNewDOMDocument

xml_document.loadXML_

"

<Person>"

&

vbCrLf&

_

<FirstName>Rod</FirstName>"

<LastName>Stephens</LastName>"

</Person>"

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

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

DOMDocument提供了几种创建新节点的方法。

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

IXMLDOMNode类

IXMLDOMNode类描述了一个节点,该类提供了一系列用于搜索和操纵XML文档的属性和方法。

selectSingleNode方法用于搜索指定节点的后代,用于搜索指定节点路径的语言称为XPATH,XPATH非常棘手,本文就不详细说明其规范了。

下面我们将介绍两个对搜索子节点有特别有用并且简单的方法。

在给selectsingleNode方法中输入子节点的名字,该方法将在节点的子节点进行精确匹配搜索。

如果在输入的字符串前面加上"

.//"

,那么将搜索节点的全部后代。

'

Searchforachildnodenamed"

LastName."

Setlast_name_node=address_node.selectSingleNode("

LastName"

Searchforanydescendantnamed"

.//LastName"

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

attributes.节点属性集合

nodeName.节点的标记名

nodeTypeString.节点的类型

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

text.表示节点包含的文本内容。

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

xml.给出了节点的xml内容,例如:

<FirstName>Rod</FirstName>"

.

ChildNodes集合包含了节点的子节点。

要给节点增加一个子节点,首先必须给使用DOMDocument对象的节点创建方法,然后将这个新建的节点加入到父节点的childNodes集合中。

下面的代码展示了创建一个新的子节点的子程序,并使用父节点的appendChild方法将其加入到父节点中:

Addanewnodetotheindicatedparentnode.

PrivateSubCreateNode(ByValindentAsInteger,_

ByValparentAsIXMLDOMNode,ByValnode_nameAsString,_

ByValnode_valueAsString)

Dimnew_nodeAsIXMLDOMNode

Createthenewnode.

Setnew_node=parent.ownerDocument.createElement(node_name)

Setthenode'

stextvalue.

new_node.Text=node_value

Addthenodetotheparent.

parent.appendChildnew_node

EndSub

SaveValues程序

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

 

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

<Values>

<FirstName>Rod</FirstName>

<LastName>Stephens</LastName>

<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'

ssave方法存储新的xml文件。

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

这是一个小的缺陷,但在这时可以使用其它程序进行修改。

List1的最后一部分是CreateNode子程序,CreateNode为父节点创建一个新节点并同时给这个节点赋值。

在这个子程序中首先引用一个DOMDocument对象,然后使用该对象的createElement方法创建一个新的节点。

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

List1:

OptionExplicit

Privatem_AppPathAsString

PrivateSubForm_Load()

Gettheapplication'

sstartuppath.

m_AppPath=App.Path

IfRight$(m_AppPath,1)<>"

\"

Thenm_AppPath=m_AppPath&

"

Loadthevalues.

LoadValues

PrivateSubForm_Unload(CancelAsInteger)

Savethecurrentvalues.

SaveValues

LoadsavedvaluesfromXML.

PrivateSubLoadValues()

Dimxml_documentAsDOMDocument

Dimvalues_nodeAsIXMLDOMNode

Loadthedocument.

Setxml_document=NewDOMDocument

xml_document.Loadm_AppPath&

Values.xml"

Ifthefiledoesn'

texist,then

xml_document.documentElementisNothing.

Ifxml_document.documentElementIsNothingThen

Thefiledoesn'

texist.Donothing.

ExitSub

EndIf

FindtheValuessection.

Setvalues_node=xml_document.selectSingleNode("

Values"

Readthesavedvalues.

txtFirstName.Text=GetNodeValue(values_node,"

FirstName"

"

?

txtLastName.Text=GetNodeValue(values_node,"

txtStreet.Text=GetNodeValue(values_node,"

Street"

txtCity.Text=GetNodeValue(values_node,"

City"

txtState.Text=GetNodeValue(values_node,"

State"

txtZip.Text=GetNodeValue(values_node,"

Zip"

Returnthenode'

svalue.

PrivateFunctionGetNodeValue(ByValstart_at_nodeAsIXMLDOMNode,_

ByValnode_nameAsString,_

OptionalByValdefault_valueAsString="

)AsString

Dimvalue_nodeAsIXMLDOMNode

Setvalue_node=start_at_node.selectSingleNode("

node_name)

Ifvalue_nodeIsNothingThen

GetNodeValue=default_value

Else

GetNodeValue=value_node.Text

EndFunction

PrivateSubSaveValues()

CreatetheXMLdocument.

CreatetheValuessectionnode.

Setvalues_node=xml_document.createElement("

AddtheValuessectionnodetothedocument.

xml_document.appendChildvalues_node

Createnodesforthevaluesinsidethe

Valuessectionnode.

CreateNodevalues_node,"

txtFirstName.Text

txtLastName.Text

txtStreet.Text

txtCity.Text

txtState.Text

txtZip.Text

SavetheXMLdocument.

xml_document.savem_AppPath&

PrivateSubCreateNode(ByValparentAsIXMLDOMNode,_

ByValnode_nameAsString,ByValnode_valueAsString)

SaveValuesIndented程序

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

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

<Values><FirstName>Rod</FirstName><LastName>Stephens</LastNa

me><Street>1234ProgrammerPlace</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

Addanewline.

values_node.appendChildxml_document.createTextNode(vbCrLf)

Valuessecti

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2