XMLDocument操作XML

本文介绍如何使用C#进行基本的XML文件操作,包括读取节点属性、读取节点值、修改节点属性及追加新节点等实用技巧。

<?xml version="1.0" encoding="utf-8"?>
<userdata createuser="false">
   <dataconnection>
     <server>localhost</server>
     <uid>sa</uid>
     <pwd></pwd>
   </dataconnection>
   <net>
     <name>jiayuan</name>
   </net>
</userdata>

读取节点中的一个属性
    XmlDocument doc=new XmlDocument();
    doc.Load("config.xml");
    XmlNode xnuser=doc.SelectSingleNode("userdata");
    string flag=xnuser.Attributes["createuser"].InnerText;

读取节点中的值
    XmlDocument doc=new XmlDocument();
    doc.Load("config.xml");
    XmlNode xnserver = doc.SelectSingleNode("userdata/dataconnection/server");

修改节点的属性
    XmlDocument doc=new XmlDocument();
    doc.Load("config.xml");
    XmlNode xnuser=doc.SelectSingleNode("userdata");
    xnuser.Attributes["createuser"].InnerText="false";
    doc.Save("config.xml");

追加节点
    XmlDocument doc = new XmlDocument();
    XmlTextReader reader = new XmlTextReader("config.xml");
    doc.Load("config.xml");
    XmlElement root = doc.DocumentElement; // 获取根节点
    XmlElement tagMessage = doc.CreateElement("net");
    XmlElement tagText = doc.CreateElement("name");
    tagText.InnerText   = netname;
    tagMessage.AppendChild(tagText);    // 追加到 xml 文本的最后面
    root.AppendChild(tagMessage);
    reader.Close();      // 关闭 XmlTextReader
    doc.Save("config.xml");      // 保存 xml 文件
 

<think> 我们参考了引用内容,用户想了解C#使用XmlDocument类读取XML的方法。根据引用[1][2][3],XmlDocument是C#中用于操作XML文档的类,它提供了一系列方法来读取和写入XML。 具体步骤: 1. 创建XmlDocument对象。 2. 使用Load方法加载XML(从文件、流或字符串)。 3. 通过选择节点(如根节点)开始遍历。 4. 使用GetElementsByTagName或SelectNodes(结合XPath)来获取节点列表,或者通过ChildNodes属性遍历。 5. 读取节点的属性、文本等内容。 引用[3]中给出了一个XML示例,我们可以根据这个示例来演示读取方法。 假设XML文件内容如下(引用[3]): <note num="123"> <message> <id>1410054101</id> <name isreal="false">白月</name> <age>23</age> <sex>men</sex> </message> </note> 读取步骤: 1. 加载XML文件。 2. 获取根节点(note)。 3. 读取根节点的属性。 4. 获取message节点。 5. 遍历message的子节点,读取每个子节点的内容。 注意:在读取节点文本时,要注意文本可能包含在子文本节点中,也可以直接使用InnerText属性。 我们将编写一个示例代码来读取上述XML。 另外,引用[1]提到创建节点和属性的方法,但用户现在需要的是读取,所以我们主要关注读取部分。 代码示例: </think> 以下是使用C#的`XmlDocument`类读取XML文档的详细方法及步骤: ### 1. 加载XML文档 ```csharp XmlDocument doc = new XmlDocument(); doc.Load("文件路径.xml"); // 从文件加载 // 或 doc.LoadXml("<note>...</note>"); // 从字符串加载 ``` ### 2. 读取根节点 ```csharp XmlElement root = doc.DocumentElement; // 获取根节点 Console.WriteLine($"根节点名称: {root.Name}"); ``` ### 3. 读取节点属性(以引用[3]的XML为例) ```csharp XmlAttribute numAttr = root.Attributes["num"]; if (numAttr != null) { Console.WriteLine($"num属性值: {numAttr.Value}"); // 输出: 123 } ``` ### 4. 读取子节点内容 ```csharp XmlNode messageNode = root.SelectSingleNode("message"); if (messageNode != null) { // 读取嵌套节点值 string id = messageNode.SelectSingleNode("id")?.InnerText; // 1410054101 string name = messageNode.SelectSingleNode("name")?.InnerText; // 白月 // 读取节点属性 XmlAttribute isrealAttr = messageNode.SelectSingleNode("name")?.Attributes["isreal"]; string isreal = isrealAttr?.Value; // false Console.WriteLine($"姓名: {name},真实性: {isreal}"); } ``` ### 5. 遍历所有子节点 ```csharp foreach (XmlNode node in messageNode.ChildNodes) { if (node.NodeType == XmlNodeType.Element) { Console.WriteLine($"{node.Name}: {node.InnerText}"); /* 输出: id: 1410054101 name: 白月 age: 23 sex: men */ } } ``` ### 6. 使用XPath查询 ```csharp // 查询所有age节点 XmlNodeList ageNodes = doc.SelectNodes("//age"); foreach (XmlNode ageNode in ageNodes) { Console.WriteLine($"年龄: {ageNode.InnerText}"); // 23 } ``` ### 关键API说明 | 方法/属性 | 作用 | 示例 | |-----------|------|------| | `SelectSingleNode()` | 选择单个节点 | `root.SelectSingleNode("message/name")` | | `SelectNodes()` | 选择节点集合 | `doc.SelectNodes("//age")` | | `InnerText` | 获取节点文本 | `node.InnerText` | | `Attributes` | 获取节点属性 | `node.Attributes["isreal"].Value` | | `ChildNodes` | 获取子节点集合 | `parentNode.ChildNodes` | > **注意事项**: > 1. 文件路径需使用绝对路径或确保相对路径正确 > 2. 节点查询区分大小写 > 3. 使用`?.`操作符避免空引用异常(如`node.SelectSingleNode("id")?.InnerText`) > 4. 处理特殊字符:XML中的`<`、`>`等需转义(如引用[3]的注释说明) ### 完整示例代码 ```csharp using System; using System.Xml; class Program { static void Main() { XmlDocument doc = new XmlDocument(); doc.Load("note.xml"); XmlElement root = doc.DocumentElement; Console.WriteLine($"根节点: {root.Name}"); // 读取属性 Console.WriteLine($"num属性: {root.GetAttribute("num")}"); // 遍历message节点 XmlNode message = root.SelectSingleNode("message"); foreach (XmlNode child in message.ChildNodes) { if (child.NodeType == XmlNodeType.Element) { Console.WriteLine($"{child.Name.PadRight(5)}: {child.InnerText}"); } } } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值