XmlDocument操作
一、基本操作: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操作的更多相关文章
- 传统XmlDocument操作
需要引用的命名空间: using System.Xml; 常用的类:XmlDocument.XmlElement.XmlNode.XmlNodeList 一.使用XmlDocument创建xml // ...
- C# XmlDocument操作XML
XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized Markup Lang ...
- 利用XmlDocument操作XML文件
利用XmlDocument可以方便的操作XML文件. .操作XML文件基本方法 ()添加对System.Xml的引用,并使用using语句添加引用: ()假设要读取的XML文件如下: <?xml ...
- 那点你不知道的XHtml(Xml+Html)语法知识(DTD、XSD)
什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ.Data 框架里有一套XHtmlAction模板引擎, 应用在QBlo ...
- C# 读取大型Xml文件
这篇博客将介绍在C#中如何读取数据量很大的Xml文件.请看下面的Xml文件, <?xml version="1.0" encoding="utf-8"?& ...
- XHtml(Xml+Html)语法知识(DTD、XSD)
那点你不知道的XHtml(Xml+Html)语法知识(DTD.XSD) 什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ ...
- C# XML入门
什么是XML? XML:可扩展标记语言. XML的作用: 纯文本,兼容性强. 和HTML的区别: xml: 主要用来处理.存储数据.无规定标签,可扩展. html:对数据的显示和描述. 语法标签固定. ...
- 读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)
在做对ReprotViewer编程时,想做一个用户可以更改显示/打印列的功能,大致看了下,只需要通过对rdlc文件中改变其<Hidden>节点值为false/true,即可实现对应某列的显 ...
- C#调用带返回值的存储过程
()在SQL Server中建立如下的存储过程: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[GetNa ...
随机推荐
- Servlet----------ServletConfig
1. 什么是 ServletConfig servletConfig对象:用于封装servlet的配置信息.从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对servlet自身有效 ...
- (4.22)Microsoft 管理控制台启用 SSL 加密的 SQL Server 实例
如何通过使用 Microsoft 管理控制台启用 SSL 加密的 SQL Server 实例 关键词:MSSQL加密,sql server加密,sql server客户端与服务器传输内容加密 转自:h ...
- pycharm的小问题之光标
一大早起来,突然发现pycharm的光变粗,按退格键会删除编写的内容,超级难受(如下图), 百度一下,也不知道在百度框里输什么关键字好,但最后还是找到了,哈哈.... 解决方法: 1.按键盘上In ...
- PS游戏摸拟器ePSXe加速游戏速度方法
1.启动ePSXe游戏摸拟器. 2.菜单栏上的设置->视频->在视频设置窗口 设置主视频插件->设置. 3.在设置插件的窗口帧速率选择框中 勾上使用帧速率限制 点选帧速率限制为(10 ...
- react 脚手架--create-react-app
1.yarn add -g create-react-app 2.create-react-app demo cd demo yarn start 可以跑起来整个项目了 一般都会用到路由,需要 yar ...
- python中的下划线
在学习Python的时候,会不理解为什么在方法(method)前面会加好几个下划线,有时甚至两边都会加.在Python中下划线还具有 private 和 protected 类似的访问权限作用,下面我 ...
- 多线程——Executor、ExecutorService、Executors三者的区别
Executor.ExecutorService.Executors三者的区别: 层次关系: public interface ExecutorService extends Executor {} ...
- [django]modelform实现的多文件上传
实现效果 代码 models.py from django.db import models import uuid class UUIDTools(object): ""&quo ...
- [LeetCode] 405. Convert a Number to Hexadecimal_Easy tag: Bit Manipulation
Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s compl ...
- js同时获得数组的两个最小值
//数组中找两个最小值,及索引 //例如数组: [2,6,7,4,10,3,5]; 计算得出,min1=2,index1=0,min2=3,index2=5; var min1 = Infinity; ...