一、基本操作:XmlDocument 写

class Program
{
static void Main(string[] args)
{
// 使用DOM操作,常用的类:XmlDocument、XmlElement、XmlAttribute和XmlText // 1.使用XmlDocument创建文档对象
XmlDocument xdoc = new XmlDocument(); // 2.创建文档描述
XmlDeclaration xdecl = xdoc.CreateXmlDeclaration("1.0", "utf-8", null);
xdoc.AppendChild(xdecl); // 使用父节点.AppendChild(子节点) // 3.创建根节点
XmlElement xRoot = xdoc.CreateElement("personCollection");
xdoc.AppendChild(xRoot); // 4.创建person
XmlElement person = xdoc.CreateElement("person");
xRoot.AppendChild(person); // 5.追加id属性
//XmlAttribute xid = xdoc.CreateAttribute("id");
//xid.Value = "001";
//person.SetAttributeNode(xid);
person.SetAttribute("id", ""); // 6.在person下面追加name、age和sex
XmlElement name = xdoc.CreateElement("name");
person.AppendChild(name);
XmlElement age = xdoc.CreateElement("age");
person.AppendChild(age);
XmlElement sex = xdoc.CreateElement("sex");
person.AppendChild(sex); // 7.给name、age和sex等元素追加数据
XmlText xname = xdoc.CreateTextNode("admin");
name.AppendChild(xname);
XmlText xage = xdoc.CreateTextNode("");
age.AppendChild(xage);
XmlText xsex = xdoc.CreateTextNode("男");
sex.AppendChild(xsex);
// 保存文档
xdoc.Save("XmlDocumentDemo.xml");
}
}

二、示例:

Users.xml文件:

<Users>
<User>admin</User>
<User>test</User>
<User>emplorer</User>
</Users>
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml; namespace ConsoleApplication1
{
public class UserHelper
{
public static string BASEPATH = AppDomain.CurrentDomain.BaseDirectory + @"Users"; /// <summary>
/// 所有的登录用户列表添加根节点
/// </summary>
public static void InitLoginUsers()
{
string userspath = BASEPATH + @"\All Users\Users.xml";
if (!File.Exists(userspath))
{
string allUserFolderPath = BASEPATH + @"\All Users";
Directory.CreateDirectory(allUserFolderPath);
FileStream fs = File.Create(userspath);
fs.Close();
}
// 1.使用XmlDocument创建文档对象
XmlDocument xmlDoc = new XmlDocument();
// 2.创建文档描述
//XmlDeclaration xxmlDecl = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
//xmlDoc.AppendChild(xxmlDecl); // 使用父节点.AppendChild(子节点)
XmlElement root = GetElement(xmlDoc, "Users");
root.InnerText = "";
xmlDoc.AppendChild(root);
// 保存文档
xmlDoc.Save(userspath);
} /// <summary>
/// 判断节点是否存在(用于Users列表)
/// 不存在 是就返回创建的一个新节点
/// 存在 返回相应的节点
/// </summary>
/// <param name="xmlDoc"></param>
/// <param name="node"></param>
/// <returns></returns>
private static XmlElement GetElement(XmlDocument xmlDoc, string node)
{
XmlElement xmlElement = null;
if (xmlDoc.SelectSingleNode(node) == null)
{
xmlElement = xmlDoc.CreateElement(node);
xmlElement.InnerText = "";
xmlDoc.AppendChild(xmlElement); // 创建根节点
//xml.DocumentElement.AppendChild(xmlElement); // 在根节点下添加子节点
}
else
{
xmlElement = (XmlElement)xmlDoc.SelectSingleNode(node);
}
return xmlElement;
} /// <summary>
/// 用户列表 添加一个新用户
/// </summary>
/// <param name="loginName"></param>
public static void AddNewUser(string loginName)
{
string userspath = BASEPATH + @"\All Users\Users.xml";
XmlDocument xmlDoc = new XmlDocument(); //建立XmlDomcument对象
xmlDoc.Load(userspath);
XmlNode root = GetElement(xmlDoc, "Users"); // 创建User
XmlElement user = xmlDoc.CreateElement("User");
user.InnerText = loginName;
root.AppendChild(user);
// 保存文档
xmlDoc.Save(userspath);
} /// <summary>
/// 删除一个用户
/// </summary>
/// <param name="loginname"></param>
public static void DeleteUserByName(string loginname)
{
string userspath = BASEPATH + @"\All Users\Users.xml";
XmlDocument xmlDoc = new XmlDocument(); //建立XmlDomcument对象
xmlDoc.Load(userspath);
XmlNode root = GetElement(xmlDoc, "Users");
XmlNodeList xList = root.SelectNodes("User"); foreach (XmlNode xNode in xList)
{
if (xNode.InnerText.Equals(loginname))
{
xNode.ParentNode.RemoveChild(xNode);
}
}
xmlDoc.Save(userspath);
} /// <summary>
/// 获取所有的用户信息
/// </summary>
/// <returns></returns>
public static List<string> SelectAllUsers()
{
List<string> listUsers = new List<string>(); string userinfopath = BASEPATH + @"\All Users\Users.xml";
if (File.Exists(userinfopath))
{
XmlDocument xmlDoc = new XmlDocument(); if (!CheckFile(userinfopath, ))
InitLoginUsers();
xmlDoc.Load(userinfopath); XmlNode root = GetElement(xmlDoc, "Users");
if (root != null)
{
XmlNodeList xList = root.SelectNodes("User"); foreach (XmlNode xNode in xList)
{
listUsers.Add(xNode.ChildNodes.Item().InnerText);
}
}
xmlDoc.Save(userinfopath);
}
return listUsers;
} /// <summary>
/// 检验文件是否是初始化的
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="type">1是个人信息,0是用户列表</param>
/// <returns>合法是TRUE,非法是FALSE</returns>
public static bool CheckFile(string filePath, int type)
{
using (StreamReader sr = new StreamReader(filePath))
{
string str = sr.ReadToEnd().Trim(); if (type == )
{
if (str.StartsWith("<PersonalConfig>") && str.Length > && str.EndsWith("</PersonalConfig>"))
{
return true;
}
}
else if (type == )
{
if (str.StartsWith("<Users>") && str.Length > && str.EndsWith("</Users>"))
{
return true;
}
}
} return false;
}
}
}

XmlDocument操作的更多相关文章

  1. 传统XmlDocument操作

    需要引用的命名空间: using System.Xml; 常用的类:XmlDocument.XmlElement.XmlNode.XmlNodeList 一.使用XmlDocument创建xml // ...

  2. C# XmlDocument操作XML

    XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized Markup Lang ...

  3. 利用XmlDocument操作XML文件

    利用XmlDocument可以方便的操作XML文件. .操作XML文件基本方法 ()添加对System.Xml的引用,并使用using语句添加引用: ()假设要读取的XML文件如下: <?xml ...

  4. 那点你不知道的XHtml(Xml+Html)语法知识(DTD、XSD)

    什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ.Data 框架里有一套XHtmlAction模板引擎, 应用在QBlo ...

  5. C# 读取大型Xml文件

    这篇博客将介绍在C#中如何读取数据量很大的Xml文件.请看下面的Xml文件, <?xml version="1.0" encoding="utf-8"?& ...

  6. XHtml(Xml+Html)语法知识(DTD、XSD)

    那点你不知道的XHtml(Xml+Html)语法知识(DTD.XSD) 什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ ...

  7. C# XML入门

    什么是XML? XML:可扩展标记语言. XML的作用: 纯文本,兼容性强. 和HTML的区别: xml: 主要用来处理.存储数据.无规定标签,可扩展. html:对数据的显示和描述. 语法标签固定. ...

  8. 读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)

    在做对ReprotViewer编程时,想做一个用户可以更改显示/打印列的功能,大致看了下,只需要通过对rdlc文件中改变其<Hidden>节点值为false/true,即可实现对应某列的显 ...

  9. C#调用带返回值的存储过程

    ()在SQL Server中建立如下的存储过程: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[GetNa ...

随机推荐

  1. java多线程和.net多线程区别与联系

    在网上搜了好多,没有搜到这方面的内容,自己浅薄写点吧. 1..net和java的主线程和子线程,原理是类似的 (1).当子线程是前台线程时,主线程结束,子线程并未结束(还将继续运行,即进程未结束) ( ...

  2. Mysql索引详细语法

    索引相关命令 - 查看表结构 desc 表名 - 查看生成表的SQL show create table 表名 - 查看索引 show index from 表名 - 查看sql执行时间 set pr ...

  3. maven 安装 配置

    一.下载及安装 1.1 下载maven 3.1.1 先到官网http://maven.apache.org/download.cgi 下载最新版本(目前是3.1.1 ),下载完成后,解压到某个目录(本 ...

  4. HBase 数据迁移方案介绍 (转载)

    原文地址:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html 一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分 ...

  5. 【LeetCode每天一题】Divide Two Integers(两整数相除)

    Given two integers dividend and divisor, divide two integers without using multiplication, division ...

  6. [Git/GitHub] Tutorial 1. Git download and commit first project

    1. Install at https://git-scm.com/downloads 2. Set up your name and email $ git config --global user ...

  7. trie字典树

    ---恢复内容开始--- 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 #include <bits/stdc++.h> usin ...

  8. np.percentile()

    np.percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear', keepdims=Fal ...

  9. WebActivatorEx—动态注册httpmodle

    源代码:https://github.com/davidebbo/WebActivator/tree/master/WebActivator unity使用演示 WebActivator类库提供了3种 ...

  10. unittest多线程生成报告-----BeautifulReport

    原文地址https://www.cnblogs.com/yoyoketang/p/8404204.html 前言 selenium多线程跑用例,这个前面一篇已经解决了,如何生成一个测试报告这个是难点, ...