XML(EXtensible Markup Language):可扩展标记语言目前被广泛的运用,本大节讨论如何操作xml文件。
关于Xml语法结构,请自行查找相关资料。
本大节使用到的Xml文件为 books.xml:
<?xml version="1.0" encoding="UTF-8"?> <BookStore> <Book ISBN="9787302424260"> <TITLE>星球大战:幽灵的威胁</TITLE> <AUTHOR>特里·布鲁克斯</AUTHOR> <COUNTRY>美国</COUNTRY> <PRICE>48.00</PRICE> <YEAR>1985</YEAR> </Book> <Book ISBN="9787302425274"> <TITLE>星球大战:克隆人的进攻</TITLE> <AUTHOR>R. A. 萨尔瓦多</AUTHOR> <COUNTRY>美国</COUNTRY> <PRICE>48.00</PRICE> <YEAR>1985</YEAR> </Book> <Book ISBN="9787302426899"> <TITLE>星球大战:西斯的复仇</TITLE> <AUTHOR>马修·斯托弗</AUTHOR> <COUNTRY>美国</COUNTRY> <PRICE>58.00</PRICE> <YEAR>1985</YEAR> </Book> <Book ISBN="9787302421146"> <TITLE>星球大战:新的希望</TITLE> <AUTHOR>乔治·卢卡斯</AUTHOR> <COUNTRY>美国</COUNTRY> <PRICE>35.00</PRICE> <YEAR>1985</YEAR> </Book> <Book ISBN="9787302421122"> <TITLE>星球大战:帝国反击战</TITLE> <AUTHOR>唐纳德·F.格卢特</AUTHOR> <COUNTRY>美国</COUNTRY> <PRICE>35.00</PRICE> <YEAR>1985</YEAR> </Book> <Book ISBN="9787302421108"> <TITLE>星球大战:绝地归来</TITLE> <AUTHOR>詹姆斯·卡恩</AUTHOR> <COUNTRY>美国</COUNTRY> <PRICE>35.00</PRICE> <YEAR>1985</YEAR> </Book> <Book ISBN="9787562849896"> <TITLE>星球大战:原力觉醒</TITLE> <AUTHOR>迪士尼公司</AUTHOR> <COUNTRY>美国</COUNTRY> <PRICE>48.00</PRICE> <YEAR>2016</YEAR> </Book> </BookStore>
主窗体设计界面:
先看看如何载入并显示xml中的数据:
添加对XML命名空间的引用:
Imports System.Xml
定义一个窗体级变量:
Dim xmlDoc As XmlDocument
使用xmlDocument.Load直接载入xml文件:
Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click xmlDoc = New XmlDocument() xmlDoc.Load("d:\books.xml") Call showXML() End Sub
或者也可以使用xmlDocument.LoadXml载入xml结构的字符串:
还需要添加对IO的引用:
Imports System.IO
Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click xmlDoc = New XmlDocument() Dim myreader As TextReader = New StreamReader("d:\books.xml") Dim mystring As String = myreader.ReadToEnd xmlDoc.LoadXml(mystring) myreader.Close() Call showXML() End Sub
以上两个方法都可以。
showXML()将读取的xml数据显示到Listview中:
Private Sub showXML() ListView1.Items.Clear() Dim rootElement As XmlElement rootElement = xmlDoc.DocumentElement Dim xmlNl As XmlNodeList = rootElement.ChildNodes Dim lvItem As ListViewItem For Each xmlchild As XmlNode In xmlNl lvItem = New ListViewItem(xmlchild.Attributes("ISBN").Value) For Each xmlgrandchild As XmlNode In xmlchild.ChildNodes lvItem.SubItems.Add(xmlgrandchild.InnerText) Next ListView1.Items.Add(lvItem) Next End Sub
通过xmlDoc.DocumentElement 获得文档的根元素,也就是BookStore
通过rootElement.ChildNodes获得根元素下的所有子节点,也就是所有的Book 节点,这是一个XmlNodeList类
通过for 循环来获得每个Book节点
通过xmlchild.Attributes("ISBN").Value 获得Book 节点的 ISBN 属性
通过再次的for循环,枚举 Book 节点下的子节点,并用xmlgrandchild.InnerText获得相应的值
运行结果:
由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。
学习更多vb.net知识,请参看vb.net 教程 目录