VB.Net – XML处理
可扩展标记语言(XML)是一种非常类似于HTML或SGML的标记语言.这是万维网联盟推荐的,可作为开放标准提供.
.Net Framework中的 System.Xml 命名空间包含用于处理XML文档的类.以下是System.Xml命名空间中的一些常用类.
| Sr.No. | Class&说明 |
|---|---|
| 1 |
XmlAttribute 表示属性.属性的有效值和默认值在文档类型定义(DTD)或模式中定义. |
| 2 |
XmlCDataSection 表示CDATA部分. |
| 3 |
XmlCharacterData 提供几个类使用的文本操作方法. |
| 4 |
XmlComment 表示XML评论的内容. |
| 5 |
XmlConvert 对XML名称进行编码和解码,并提供在公共语言运行时类型和XML模式定义语言(XSD)类型之间进行转换的方法.转换数据类型时,返回的值与区域设置无关. |
| 6 |
XmlDeclaration 表示XML声明节点<?xml version ='1.0'...?> ;. |
| 7 |
XmlDictionary 实现用于优化Windows Communication Foundation(WCF)的XML读取器/写入器实现的字典. |
| 8 |
XmlDictionaryReader Windows Communication Foundation(WCF)从XmlReader派生的抽象类,用于执行序列化和反序列化. |
| 9 |
XmlDictionaryWriter 代表Windows Communication Foundation(WCF)从XmlWriter派生的抽象类,用于执行序列化和反序列化. |
| 10 |
XmlDocument 表示XML文档. |
| 11 |
XmlDocumentFragment 表示一个对树插入操作很有用的轻量级对象. |
| 12 |
XmlDocumentType 表示文档类型声明. |
| 13 |
XmlElement 表示一个元素. |
| 14 |
XmlEntity 表示实体声明,例如<!ENTITY. ..>. |
| 15 |
XmlEntityReference 表示实体引用节点. |
| 16 |
XmlException 返回关于最后一个例外的详细信息. |
| 17 |
XmlImplementation 定义一组XmlDocument对象的上下文. |
| 18 |
XmlLinkedNode 获取前一个节点或者跟随这个节点. |
| 19 |
XmlNode 表示XML文档中的单个节点. |
| 20 |
XmlNodeList 表示有序的节点集合. |
| 21 |
XmlNodeReader 表示一个读者,它提供对XmlNode中XML数据的快速,非缓存的仅前向访问. |
| 22 |
XmlNotation 表示符号声明,例如<!NOTATION ...>. |
| 23 |
XmlParserContext 提供XmlReader解析XML片段所需的所有上下文信息. |
| 24 |
XmlProcessingInstruction 表示处理指令,XML定义该指令以保持处理器特定的信息.文件的文字. |
| 25 |
XmlQualifiedName 表示XML限定名称. |
| 26 |
XmlReader 代表读者,提供对XML数据的快速,非缓存,仅向前访问. |
| 27 |
XmlReaderSettings 指定一组要在Create创建的XmlReader对象上支持的功能方法. |
| 28 |
XmlResolver 解析由统一资源标识符(URI)命名的外部XML资源. |
| 29 |
XmlSecureResolver 通过包装XmlResolver对象并限制底层XmlResolver可以访问的资源来帮助保护XmlResolver的另一个实现. |
| 30 |
XmlSignificantWhitespace 表示空格混合内容节点中的标记或xml:space ='preserve'范围内的空格之间.这也称为重要空格. |
| 31 |
XmlText 表示元素或属性的文本内容. |
| 32 |
XmlTextReader 表示提供对XML数据的快速,非缓存,仅向前访问的阅读器. |
| 33 |
XmlTextWriter 代表作家提供了一种快速,非缓存,仅向前生成包含XML数据的流或文件的方法,这些数据符合W3C可扩展标记语言(XML)1.0和XML推荐中的命名空间. |
| 34 |
XmlUrlResolver 解析由统一资源标识符(URI)命名的外部XML资源. |
| 35 |
XmlWhitespace 表示元素内容中的空格. |
| 36 |
XmlWriter 表示一个提供快速,非缓存,仅向前的方法的编写器生成包含XML数据的流或文件. |
| 37 |
XmlWriterSettings 指定一组要支持XmlWriter.Create方法创建的XmlWriter对象的功能. |
XML Parser API
两个最基本和最广泛使用的API XML数据是SAX和DOM接口.
-
XML的简单API(SAX)&minus ;在这里,您为感兴趣的事件注册回调,然后让解析器继续处理该文档.当文档很大或存在内存限制时,这很有用,它在从磁盘读取文件时解析文件,整个文件永远不会存储在内存中.
-
文档对象模型(DOM)API : 这是万维网联盟的建议,其中整个文件被读入内存并以分层(基于树)的形式存储,以表示XML文档的所有功能.
在使用大文件时,SAX显然无法像DOM一样快地处理信息.另一方面,专门使用DOM可以真正杀死你的资源,特别是如果在很多小文件上使用它.
SAX是只读的,而DOM允许更改XML文件.由于这两个不同的API在字面上相互补充,因此没有理由不将它们用于大型项目.
对于我们所有的XML代码示例,让我们使用一个简单的XML文件电影.xml作为输入和减号;
<?xml version = "1.0"?> <collection shelf = "New Arrivals"> <movie title = "Enemy Behind"> <type>War, Thriller</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>Talk about a US-Japan war</description> </movie> <movie title = "Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>A schientific fiction</description> </movie> <movie title = "Trigun"> <type>Anime, Action</type> <format>DVD</format> <episodes>4</episodes> <rating>PG</rating> <stars>10</stars> <description>Vash the Stampede!</description> </movie> <movie title = "Ishtar"> <type>Comedy</type> <format>VHS</format> <rating>PG</rating> <stars>2</stars> <description>Viewable boredom</description> </movie> </collection>
使用SAX API解析XML
在SAX模型中,您使用 XmlReader 和 XmlWriter 类用于处理XML数据.
XmlReader 类用于快速向前读取XML数据和非缓存的方式.它读取XML文档或流.
示例1
此示例演示如何从文件movies.xml读取XML数据.
采取以下步骤&减去;
-
在bin \中添加movies.xml文件应用程序的Debug文件夹.
-
在Form1.vb文件中导入System.Xml命名空间.
-
在表单中添加标签并将其文本更改为"Movies Galore".
-
添加三个列表框和三个按钮以显示标题,来自xml文件的电影的类型和描述.
-
使用代码编辑器窗口添加以下代码.
Imports System.Xml
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Set the caption bar text of the form.
Me.Text = "IT屋.com"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ListBox1().Items.Clear()
Dim xr As XmlReader = XmlReader.Create("movies.xml")
Do While xr.Read()
If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "movie" Then
ListBox1.Items.Add(xr.GetAttribute(0))
End If
Loop
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
ListBox2().Items.Clear()
Dim xr As XmlReader = XmlReader.Create("movies.xml")
Do While xr.Read()
If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "type" Then
ListBox2.Items.Add(xr.ReadElementString)
Else
xr.Read()
End If
Loop
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
ListBox3().Items.Clear()
Dim xr As XmlReader = XmlReader.Create("movies.xml")
Do While xr.Read()
If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "description" Then
ListBox3.Items.Add(xr.ReadElementString)
Else
xr.Read()
End If
Loop
End Sub
End Class
使用执行并运行上述代码"开始"按钮可在Microsoft Visual Studio工具栏中找到.单击按钮将显示文件中电影的显示,标题,类型和描述.

XmlWriter 类用于将XML数据写入流,文件或TextWriter对象.它也可以以只进,非缓存的方式工作.
示例2
让我们通过在运行时添加一些数据来创建XML文件.请执行以下步骤 :
-
在表单中添加WebBrowser控件和按钮控件.
-
将按钮的Text属性更改为Show Authors File.
-
在代码编辑器中添加以下代码.
Imports System.Xml
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Set the caption bar text of the form.
Me.Text = "IT屋.com"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim xws As XmlWriterSettings = New XmlWriterSettings()
xws.Indent = True
xws.NewLineOnAttributes = True
Dim xw As XmlWriter = XmlWriter.Create("authors.xml", xws)
xw.WriteStartDocument()
xw.WriteStartElement("Authors")
xw.WriteStartElement("author")
xw.WriteAttributeString("code", "1")
xw.WriteElementString("fname", "Zara")
xw.WriteElementString("lname", "Ali")
xw.WriteEndElement()
xw.WriteStartElement("author")
xw.WriteAttributeString("code", "2")
xw.WriteElementString("fname", "Priya")
xw.WriteElementString("lname", "Sharma")
xw.WriteEndElement()
xw.WriteStartElement("author")
xw.WriteAttributeString("code", "3")
xw.WriteElementString("fname", "Anshuman")
xw.WriteElementString("lname", "Mohan")
xw.WriteEndElement()
xw.WriteStartElement("author")
xw.WriteAttributeString("code", "4")
xw.WriteElementString("fname", "Bibhuti")
xw.WriteElementString("lname", "Banerjee")
xw.WriteEndElement()
xw.WriteStartElement("author")
xw.WriteAttributeString("code", "5")
xw.WriteElementString("fname", "Riyan")
xw.WriteElementString("lname", "Sengupta")
xw.WriteEndElement()
xw.WriteEndElement()
xw.WriteEndDocument()
xw.Flush()
xw.Close()
WebBrowser1.Url = New Uri(AppDomain.CurrentDomain.BaseDirectory + "authors.xml")
End Sub
End Class
-
使用Microsoft Visual Studio工具栏上提供的开始按钮执行并运行上述代码.单击"显示作者文件"将在Web浏览器上显示新创建的authors.xml文件.

使用DOM API解析XML
根据文档对象模型(DOM),XML文档由节点和节点的属性组成. XmlDocument 类用于实现.Net Framework的XML DOM解析器.它还允许您通过插入,删除或更新文档中的数据来修改现有的XML文档.
以下是 XmlDocument 的一些常用方法class :
| Sr.No. | 方法名称&描述 |
|---|---|
| 1 |
AppendChild 将指定节点添加到此节点的子节点列表的末尾. |
| 2 |
CreateAttribute (String) 创建具有指定名称的XmlAttribute. |
| 3 |
CreateComment 创建一个包含指定数据的XmlComment. |
| 4 |
CreateDefaultAttribute 创建具有指定前缀,本地名称和名称空间URI. |
| 5 |
CreateElement(String) 创建具有指定名称的元素. |
| 6 |
CreateNode( String,String,String) 创建一个具有指定节点类型,Name和NamespaceURI的XmlNode. |
| 7 |
CreateNode(XmlNodeType, String,String) 使用指定的XmlNodeType,Name和NamespaceURI创建一个XmlNode. |
| 8 |
CreateNode(XmlNodeType,String,String ,String) 使用指定的XmlNodeType,Prefix,Name和NamespaceURI创建一个XmlNode. |
| 9 |
CreateProcessingInstruction 使用指定的名称和数据创建一个XmlProcessingInstruction. |
| 10 |
CreateSignificantWhitespace 创建XmlSignificantWhitespace节点. |
| 11 |
CreateTextNode 创建具有指定文本的XmlText. |
| 12 |
CreateWhitespace 创建一个XmlWhitespace节点. |
| 13 |
CreateXmlDeclaration 创建具有指定的XmlDeclaration节点价值. |
| 14 |
GetElementById 获取具有指定ID的XmlElement. |
| 15 |
GetElementsByTagName(String) 返回一个XmlNodeList,其中包含与指定名称匹配的所有后代元素的列表. |
| 16 |
GetElementsByTagName(String,String) 返回包含所有后代列表的XmlNodeList与指定的LocalName和NamespaceURI匹配的元素. |
| 17 |
InsertAfter 在指定的参考节点之后立即插入指定的节点. |
| 18 |
InsertBefore 在指定的参考节点之前插入指定的节点. |
| 19 |
Load(Stream) 从指定的流中加载XML文档. |
| 20 |
Load(String) 从指定的URL加载XML文档. |
| 21 |
Load(TextReader) 加载指定的XML文档TextReader. |
| 22 |
Load(XmlReader) 从指定的XmlReader加载XML文档. |
| 23 |
LoadXml 从指定的字符串加载XML文档. |
| 24 |
PrependChild 将指定节点添加到此节点的子节点列表的开头. |
| 25 |
ReadNode 根据XmlReader中的信息创建XmlNode对象.读者必须位于节点或属性上. |
| 26 |
RemoveAll 删除当前的所有子节点和/或属性节点. |
| 27 |
RemoveChild 删除指定的子节点. |
| 28 |
ReplaceChild 用newChild节点替换子节点oldChild. |
| 29 |
Save(Stream) 将XML文档保存到指定的流. |
| 30 |
Save(String) 将XML文档保存到指定文件. |
| 31 |
Save(TextWriter) 保存XML文档指定的TextWriter. |
| 32 |
Save(XmlWriter) 将XML文档保存到指定的XmlWriter. |
示例3
在此示例中,我们插入xml文档authors.xml中的一些新节点,然后在列表框中显示所有作者的名字.
采取以下步骤 :
-
将authors.xml文件添加到应用程序的bin/Debug文件夹中(如果您已经尝试过最后一个示例,它应该在那里)
-
导入System.Xml命名空间
-
在表单中添加一个列表框和一个按钮控件并设置显示作者的按钮控件的text属性.
-
使用代码编辑器添加以下代码.
Imports System.Xml
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Set the caption bar text of the form.
Me.Text = "IT屋.com"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ListBox1.Items.Clear()
Dim xd As XmlDocument = New XmlDocument()
xd.Load("authors.xml")
Dim newAuthor As XmlElement = xd.CreateElement("author")
newAuthor.SetAttribute("code", "6")
Dim fn As XmlElement = xd.CreateElement("fname")
fn.InnerText = "Bikram"
newAuthor.AppendChild(fn)
Dim ln As XmlElement = xd.CreateElement("lname")
ln.InnerText = "Seth"
newAuthor.AppendChild(ln)
xd.DocumentElement.AppendChild(newAuthor)
Dim tr As XmlTextWriter = New XmlTextWriter("movies.xml", Nothing)
tr.Formatting = Formatting.Indented
xd.WriteContentTo(tr)
tr.Close()
Dim nl As XmlNodeList = xd.GetElementsByTagName("fname")
For Each node As XmlNode In nl
ListBox1.Items.Add(node.InnerText)
Next node
End Sub
End Class
-
使用开始执行并运行上述代码> Microsoft Visual Studio工具栏中提供的按钮.单击"显示作者"按钮将显示所有作者的名字,包括我们在运行时添加的名称.
