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 ...
随机推荐
- discuz优化10个小技巧
Discuz论坛是国内使用最多的论坛系统,现在最新版为X 3.4,X3.4 从 2018 年 1 月 1 日起只在官方 Git 发布,地址:https://gitee.com/ComsenzDiscu ...
- 用laravel dingo/api创建产品api
沿着上一篇来讲,我们来创建一个简单的item产品api,也是用到laravel dingo/api来实现,对dingo/api不熟的朋友可以翻看前面的文章.好,我们随着ytkah一起来创建产品api ...
- arcgis api for javascript 距离与面积量算
在之前的实验中,距离量算跟面积量算一直出问题,费了非常长的时间,各种调式找不到原因. 如今成功完毕.与君共勉 1.距离量算中 lengthParams.polylines = [geom ...
- 4A
#include <iostream> using namespace std; int main() { int a; cin>>a; if((a>=4) && ...
- ntp开机无法自启
1.1 查询ntp状态 [root@host-172-18-0-37 ~]# service ntpd status Redirecting to /bin/systemctl status ntpd ...
- 使用Python自带difflib模块进行文件内容差异对比
difflib_text.py #!/usr/bin/python import difflib import sys try: textfile1=sys.argv[1] textfile2=sys ...
- sync修饰符的简易说明
其实这个就说的很好了. sync会自动更新父组件的数据 原本valuechild 的值是222,父页面显示的222,把值传递给子组件 子组件也显示的222, 我点击子组件的按钮 把333传递给父组件, ...
- js 图片区域可点击,适配移动端,图片大小随意改变
实现图片区域可点击,实际上使用map是可以的,但是适配效果并不好,图片只能是固定大小的值,而且点都被写死了. 在这里,我使用的js基于canvas写的一个小工具.可以圈出你需要点击的部分,然后生成一串 ...
- async和await用法(Task)
原文:async和await用法 要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点. 如果你已经对Task很了解,那么如何使用async和await, ...
- 关于bjam编译自己模块出错的问题
将这个目录下C:\Users\Regubed的user-config.jam改为下面内容 # MSVC configurationusing msvc : 9.0 ; # Python configu ...