C#操作XML


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Xml;

namespace PuTianCheng
{
/// <summary>
/// XmlHelper 的摘要说明
/// </summary>
public class XmlHelper
{
public XmlHelper()
{
}

/// <summary>
/// 读取数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param>
/// <returns>string</returns>
/**************************************************
* 使用示列:
* XmlHelper.Read(path, "/Node", "")
* XmlHelper.Read(path, "/Node/Element[@Attribute='Name']", "Attribute")
************************************************/
public static string Read(string path, string node, string attribute)
{
string value = "";
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xn = doc.SelectSingleNode(node);
value = (attribute.Equals("") ? xn.InnerText : xn.Attributes[attribute].Value);
}
catch { }
return value;
}

/// <summary>
/// 插入数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>
/// <param name="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param>
/// <param name="value">值</param>
/// <returns></returns>
/**************************************************
* 使用示列:
* XmlHelper.Insert(path, "/Node", "Element", "", "Value")
* XmlHelper.Insert(path, "/Node", "Element", "Attribute", "Value")
* XmlHelper.Insert(path, "/Node", "", "Attribute", "Value")
************************************************/
public static void Insert(string path, string node, string element, string attribute, string value)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xn = doc.SelectSingleNode(node);
if (element.Equals(""))
{
if (!attribute.Equals(""))
{
XmlElement xe = (XmlElement)xn;
xe.SetAttribute(attribute, value);
}
}
else
{
XmlElement xe = doc.CreateElement(element);
if (attribute.Equals(""))
xe.InnerText = value;
else
xe.SetAttribute(attribute, value);
xn.AppendChild(xe);
}
doc.Save(path);
}
catch { }
}

/// <summary>
/// 修改数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param>
/// <param name="value">值</param>
/// <returns></returns>
/**************************************************
* 使用示列:
* XmlHelper.Insert(path, "/Node", "", "Value")
* XmlHelper.Insert(path, "/Node", "Attribute", "Value")
************************************************/
public static void Update(string path, string node, string attribute, string value)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xn = doc.SelectSingleNode(node);
XmlElement xe = (XmlElement)xn;
if (attribute.Equals(""))
xe.InnerText = value;
else
xe.SetAttribute(attribute, value);
doc.Save(path);
}
catch { }
}

/// <summary>
/// 删除数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>
/// <param name="value">值</param>
/// <returns></returns>
/**************************************************
* 使用示列:
* XmlHelper.Delete(path, "/Node", "")
* XmlHelper.Delete(path, "/Node", "Attribute")
************************************************/
public static void Delete(string path, string node, string attribute)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xn = doc.SelectSingleNode(node);
XmlElement xe = (XmlElement)xn;
if (attribute.Equals(""))
xn.ParentNode.RemoveChild(xn);
else
xe.RemoveAttribute(attribute);
doc.Save(path);
}
catch { }
}
}
}

使用示例:
//string xml = Server.MapPath("XmlFile.xml");
string xml = @"d:\我的文档\Visual Studio 2008\Projects\ConsoleApplication1\ConsoleApplication1\XmlFile.xml";
//插入元素
XmlHelper.Insert(xml, "/Root", "Studio", "", "");
//插入元素/属性
//XmlHelper.Insert(xml, "/Root/Studio", "Site", "Name", "小路工作室");
//XmlHelper.Insert(xml, "/Root/Studio", "Site", "Name", "丁香鱼工作室");
//XmlHelper.Insert(xml, "/Root/Studio", "Site", "Name", "谱天城工作室");
//XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "Master", "", "红尘静思");
//插入属性
//XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='小路工作室']", "", "Url", "http://www.wzlu.com/");
//XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='丁香鱼工作室']", "", "Url", "http://www.luckfish.net/");
//XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "", "Url", "http://www.putiancheng.com/");
//修改元素值
//XmlHelper.Update(xml, "/Root/Studio/Site[@Name='谱天城工作室']/Master", "", "RedDust");
//修改属性值
//XmlHelper.Update(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "Url", "http://www.putiancheng.net/");
//XmlHelper.Update(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "Name", "PuTianCheng Studio");
//读取元素值
Console.Write("<div>" + XmlHelper.Read(xml, "/Root/Studio/Site/Master", "") + "</div>");
//读取属性值
Console.Write("<div>" + XmlHelper.Read(xml, "/Root/Studio/Site", "Url") + "</div>");
//读取特定属性值
Console.Write("<div>" + XmlHelper.Read(xml, "/Root/Studio/Site[@Name='丁香鱼工作室']", "Url") + "</div>");
//删除属性
//XmlHelper.Delete(xml, "/Root/Studio/Site[@Name='小路工作室']", "Url");
//删除元素
//XmlHelper.Delete(xml, "/Root/Studio", "");

XMLFile.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<Root/>
C# 读取 XML 文件有多种方法,以下为你详细介绍: ### 使用 `XmlDocument` 操作 `XmlDocument` 是一个用于处理 XML 数据的类,它可以将 XML 文件加载到内存中,并提供了一系列方法和属性来操作 XML 节点。示例代码如下: ```csharp using System; using System.Collections.Generic; using System.Xml; class Program { static void Main() { // 获取所有一级目录 List<string> devices = new List<string>(); XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\TEMP\Configs.xml"); XmlNode xnl1 = doc.DocumentElement; foreach (XmlNode xn1 in xnl1.ChildNodes) { XmlElement xe1 = (XmlElement)xn1; devices.Add(xe1.GetAttribute("name").ToString()); } // 获取某个一级目录下的子目录 List<string> types = new List<string>(); doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\TEMP\Configs.xml"); xnl1 = doc.DocumentElement; foreach (XmlNode xn1 in xnl1) { XmlElement xe1 = (XmlElement)xn1; if (xe1.GetAttribute("name").ToString() == "aaa") { XmlNodeList xnl2 = xe1.ChildNodes; foreach (XmlNode xn2 in xnl2) { XmlElement xe2 = (XmlElement)xn2; types.Add(xe2.GetAttribute("name").ToString()); } break; } } } } ``` ### 使用 `XmlTextReader`/`XmlTextWriter` 操作 `XmlTextReader` 用于读取 XML 文件,`XmlTextWriter` 用于写入 XML 文件。这种方式是基于流的方式,逐行读取 XML 文件,适合处理大型 XML 文件。示例代码如下: ```csharp using System; using System.Xml; class Program { static void Main() { using (XmlTextReader reader = new XmlTextReader("path/to/your/xml/file.xml")) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { Console.WriteLine("Element: " + reader.Name); } } } } } ``` ### 使用 `Linq to Xml` 操作 `Linq to Xml` 是一种基于 LINQ 的 XML 处理方式,它提供了一种更简洁、更灵活的方式来处理 XML 数据。示例代码如下: ```csharp using System; using System.Linq; using System.Xml.Linq; class Program { static void Main() { XDocument doc = XDocument.Load("path/to/your/xml/file.xml"); var elements = from el in doc.Descendants("elementName") select el; foreach (var element in elements) { Console.WriteLine(element.Value); } } } ``` ### 使用 `DataSet` 操作 `DataSet` 可以将 XML 文件加载到内存中,并将其转换为表格形式,方便进行数据操作。这种方式最简单,而且取数据也很方便,但是对于比较复杂的 XML操作起来也很麻烦,每一个带属性的节点都会生成一个 table。示例代码如下: ```csharp using System; using System.Data; class Program { static void Main() { // xml 文件路径 string xmlPath = Application.StartupPath + "\\Student.xml"; // 不带属性 string xmlPaths = Application.StartupPath + "\\Students.xml"; // 带属性 // dataset 读取简单 xml 文件 DataSet ds = new DataSet(); ds.ReadXml(xmlPath); // 读取第一条数据的 name 节点 string name = ds.Tables[0].Rows[0]["name"].ToString(); Console.WriteLine(name); // dataset 读取带属性的 xml 文件 ds = new DataSet(); ds.ReadXml(xmlPaths); // 读取的节点名称 string nodeName = "name"; name = ds.Tables[nodeName].Rows[0][nodeName + "_Text"].ToString(); // 读取节点的 id 属性 string id = ds.Tables[nodeName].Rows[0]["id"].ToString(); Console.WriteLine("id:{0},name:{1}", id, name); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值