VB.Net - XML处理
.Net框架中的System.Xml命名空间包含用于处理XML文档的类。 以下是System.Xml命名空间中常用的一些类。
SN | 类 | 描述 |
---|---|---|
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 通信基础(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 | 代表作家提供了一个快速,非缓存,只进生成包含符合W3C可扩展标记语言(XML)1.0和XML中建议的命名空间XML数据流或文件的方式。 |
34 | XmlUrlResolver | 解析由统一资源标识符(URI)命名的外部XML资源。 |
35 | XmlWhitespace | 代表元素内容中的空白。 |
36 | XmlWriter | 表示提供快速,非缓存,仅转发方式生成包含XML数据的流或文件的写入程序。 |
37 | XmlWriterSettings | 指定一组要在XmlWriter.Create方法创建的XmlWriter对象上支持的要素。 |
XML解析器的API
XML数据的两个最基本和广泛使用的API是SAX和DOM接口。XML的简单API(SAX):在这里,您注册感兴趣的事件的回调,然后让解析器继续处理文档。这在文档很大或者有内存限制时很有用,它在从磁盘读取文件时解析文件,整个文件从不存储在内存中。
文档对象模型(DOM)API:这是万维网联盟推荐,其中整个文件被读入存储器并以分层(基于树)的形式存储以表示XML文档的所有特征。
SAX显然不能像使用大文件时DOM那样快速地处理信息。另一方面,使用DOM可以真正地杀死你的资源,特别是如果用于很多小文件。
SAX是只读的,而DOM允许更改XML文件。由于这两个不同的API字面上互补,没有理由你不能使用它们两个大项目。
对于所有的XML代码示例,让我们使用一个简单的XML文件movies.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>
解析XML使用SAX API
在SAX模型中,使用XmlReader和XmlWriter类来处理XML数据。XmlReader类用于以快速,仅向前和非缓存方式读取XML数据。 它读取XML文档或流。
示例1
此示例演示从文件movies.xml中读取XML数据。
执行以下步骤:
将movies.xml文件添加到应用程序的bin \ 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 = "tutorialspoint.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属性更改为显示作者文件。
在代码编辑器中添加以下代码。
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 = "tutorialspoint.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框架的XML DOM解析器。 它还允许您通过插入,删除或更新文档中的数据来修改现有的XML文档。
以下是XmlDocument类的一些常用方法:
SN | 方法名称和说明 |
---|---|
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。 |
17 | InsertAfter 在指定的引用节点之后立即插入指定的节点。 |
18 | InsertBefore 在指定的引用节点之前插入指定的节点。 |
19 | Load(Stream) 从指定的流装载XML文档。 |
20 | Load(String) 从指定的TextReader加载XML文档。 |
21 | Load(TextReader) 从指定的TextReader加载XML文档。 |
22 | Load(XmlReader) 从指定的XmlReader加载XML文档。 |
23 | LoadXml 从指定的字符串加载XML文档。 |
24 | PrependChild 将指定的节点添加到此节点的子节点列表的开头。 |
25 | ReadNode 基于XmlReader中的信息创建XmlNode对象。读取器必须位于节点或属性上。 |
26 | RemoveAll 删除当前节点的所有子节点和/或属性。 |
27 | RemoveChild 删除指定的子节点。 |
28 | ReplaceChild 将子节点oldChild替换为newChild节点。 |
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 = "tutorialspoint.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工具栏上的“开始”按钮执行并运行上述代码。 单击“显示作者”按钮将显示所有作者的名字,包括我们在运行时添加的作者。