XML解析与属性获取

在现代软件开发中,XML(可扩展标记语言)是一种常用的数据格式,用于存储和传输数据。它具有自描述性、可扩展性和平台独立性等特点。在C#编程语言中,解析XML数据是一项常见的任务,本文将介绍如何使用C#解析XML数据,并提取元素的属性值。

创建解析类

首先,需要创建一个名为Parse的类,该类将负责解析XML数据。将使用Hashtable来存储元素的属性名和值,以便后续可以通过GetAttribute()方法获取属性值。

在Parse类中,将定义一个名为ParseURL的方法,该方法接受一个XML数据字符串作为参数。将使用MemoryStream和XmlTextReader来读取和解析XML数据。

public class Parse { Hashtable attributes; public void ParseURL(string xmlData) { try { string errorString = string.Empty; byte[] byteArray = new byte[xmlData.Length]; System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); byteArray = encoding.GetBytes(xmlData); attributes = new Hashtable(); // Load the memory stream MemoryStream memoryStream = new MemoryStream(byteArray); memoryStream.Seek(0, SeekOrigin.Begin); XmlTextReader reader = new XmlTextReader(memoryStream); while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: string strURI = reader.NamespaceURI; string strName = reader.Name; if (reader.HasAttributes) { for (int i = 0; i < reader.AttributeCount; i++) { reader.MoveToAttribute(i); if (!attributes.ContainsKey(reader.Name)) { attributes.Add(reader.Name, reader.Value); } } } break; default: break; } } } catch (XmlException e) { Console.WriteLine("error occured: " + e.Message); } } }

在Parse类中,还需要定义一个名为GetAttribute的方法,该方法接受一个属性键作为参数,并返回对应的属性值。如果属性不存在,将返回错误信息。

public string GetAttribute(string key) { try { return attributes[key].ToString(); } catch (XmlException e) { return "error occured: " + e.Message; } }

使用解析

在实际应用中,可以通过创建Parse类的实例并调用ParseURL方法来解析XML数据。然后,可以使用GetAttribute方法来获取特定元素的属性值。

假设有以下XML数据:

<?xml version="1.0" encoding="utf-8"?> <books> <book id="1"> <title>C# Programming</title> <author>John Doe</author> </book> <book id="2"> <title>XML Fundamentals</title> <author>Jane Smith</author> </book> </books> Parse parser = new Parse(); parser.ParseURL(xmlData); string title = parser.GetAttribute("title"); string author = parser.GetAttribute("author"); Console.WriteLine("Title: " + title); Console.WriteLine("Author: " + author);
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485