class Program
{
private static string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "document.xml");
static void Main(string[] args)
{
try
{
Console.WriteLine("******** XML 文件增删改 *****************\r\n");
//创建xml文件
Generate();
//查询xml文件数据
GetAllXMLData();
Thread.Sleep(100);
//修改XML
ModifyXml();
//添加节点
AddXMLNode();
Console.WriteLine("&&&&& 是否删除最后一个节点 1/2(Yes/No)");
if (Convert.ToInt32(Console.ReadLine()) == 1)
{ //删除节点
DeleteXMLNode();
}
}
catch (Exception ex)
{
Console.Clear();
Console.WriteLine("程序异常:" + ex.Message);
}
}
//生成XML文件
private static void Generate()
{
Console.WriteLine("\r\n******** 创建XML文件 开始 *****************\r\n");
//在内存中创建Dom对象
XmlDocument xmlDocument = new XmlDocument();
//增加文档说明
XmlDeclaration xmlDeclaration = xmlDocument.CreateXmlDeclaration("1.0", "utf-8", "");
//添加进文档
xmlDocument.AppendChild(xmlDeclaration);
//创建跟节点
XmlElement xmlElement = xmlDocument.CreateElement("Student");
xmlDocument.AppendChild(xmlElement);
XmlElement xmlElement2 = xmlDocument.CreateElement("Name");
xmlElement2.SetAttribute("ID", "101");
xmlElement.AppendChild(xmlElement2);
XmlElement xmlElement3 = xmlDocument.CreateElement("Sex");
xmlElement.AppendChild(xmlElement3);
XmlElement xmlElement3_1 = xmlDocument.CreateElement("sex1");
xmlElement3_1.InnerText = "男";
xmlElement3.AppendChild(xmlElement3_1);
XmlElement xmlElement3_2 = xmlDocument.CreateElement("sex2");
xmlElement3_2.InnerText = "女";
xmlElement3.AppendChild(xmlElement3_2);
XmlElement xmlElement4 = xmlDocument.CreateElement("Address");
xmlElement4.InnerText = "广东";
xmlElement.AppendChild(xmlElement4);
xmlDocument.Save(path);
Console.WriteLine($"生成XML文件成功:路径{path}");
Process.Start(path);
Console.WriteLine("\r\n******** 创建XML文件 结束 *****************\r\n\r\n");
/*
XmlTextWriter w = new XmlTextWriter("XML文件名.xml", Encoding.Unicode); //Encoding.Unicode为生成XML文件的编码格式,到时候合输出:<?xml version="1.0" encoding="utf-16"?>
w.Formatting = Formatting.Indented; // 这个比较重要,这个属性说明xml文件里面的内容是按级别缩进的。
//下面开始生成文件的内容
w.WriteStartDocument(); //开始写xml,在最后有一个与之匹配的w.WriteEndDocument();
w.WriteStartElement("SpotList");
w.WriteAttributeString("xmlns:xsi", "http:www.w3.org/2001/XMLSchema-instance"); //SpotList节点的属性
w.WriteAttributeString("xmlns:xsd", "http:www.w3.org/2001/XMLSchema"); //SpotList节点属性,最后效果:<SpotList xmlns:xsi="http:www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:www.w3.org/2001/XMLSchema">
w.WriteStartElement("Items");
w.WriteElementString("Name", "张漂亮");
w.WriteElementString("Caption", "温和");
w.WriteElementString("Addr", "未知");
w.WriteElementString("Phone", "1345678987");
w.WriteStartElement("Intro"); //最后效果:<Intro><![CDATA[相关内容]]></Intro>
w.WriteCData("Stop");
//w.WriteEndElement();
//w.WriteEndElement();
//w.WriteEndElement();
w.WriteEndDocument();
w.Close(); //完成xml文件的输出,关闭
*/
}
//读取XML
private static void GetAllXMLData()
{
Console.WriteLine("\r\n******** 读取XML文件 开始 *****************\r\n");
XmlDocument xmlDocument = new XmlDocument();
//加载xml文件(参数为xml文件的路径)
xmlDocument.Load(path);
//获得第一个姓名匹配的节点(SelectSingleNode):此xml文件的根节点
XmlNode rootNode = xmlDocument.SelectSingleNode("Student");
//分别获得该节点的InnerXml和OuterXml信息
string innerXmlInfo = rootNode.InnerXml.ToString();
string outerXmlInfo = rootNode.OuterXml.ToString();
Console.WriteLine("读取顶级标签");
Console.WriteLine(innerXmlInfo);
Console.WriteLine("");
Console.WriteLine(outerXmlInfo);
Console.WriteLine("");
//获得该节点的子节点(即:该节点的第一层子节点)
XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
foreach (XmlNode node in firstLevelNodeList)
{
//获得该节点的属性集合
XmlAttributeCollection attributeCol = node.Attributes;
foreach (XmlAttribute attri in attributeCol)
{
//获取属性名称与属性值
string name = attri.Name;
string value = attri.Value;
Console.WriteLine("{0} = {1}", name, value);
}
//判断此节点是否还有子节点
if (node.HasChildNodes)
{
//获取该节点的第一个子节点
XmlNode secondLevelNode1 = node.FirstChild;
//获取该节点的名字
string name = secondLevelNode1.Name;
//获取该节点的值(即:InnerText)
string innerText = secondLevelNode1.InnerText;
Console.WriteLine("{0} = {1}", name, innerText);
//获取该节点的第二个子节点(用数组下标获取)
XmlNode secondLevelNode2 = node.ChildNodes[1];
if (secondLevelNode2 == null) break;
name = secondLevelNode2.Name;
innerText = secondLevelNode2.InnerText;
Console.WriteLine("{0} = {1}", name, innerText);
}
}
Console.WriteLine("\r\n******** 读取XML文件 结束 *****************\r\n");
/*
另一种简单的读取方法
XmlTextReader reader = reader = new XmlTextReader(path);
reader.MoveToContent();
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(reader.ReadOuterXml());
XmlNode node = xmlDocument.SelectSingleNode("/ConfigName");
XmlNodeList appList = node.ChildNodes;
循环遍历 app.InnerText 得到标签里面的数据
*/
}
//修改XML
private static void ModifyXml()
{
Console.WriteLine("\r\n******** 修改XML文件 开始 *****************\r\n");
XmlDocument myXmlDoc = new XmlDocument();
myXmlDoc.Load(path);
XmlNodeList xmlNodeList = myXmlDoc.SelectSingleNode("/Student").ChildNodes;
foreach (XmlNode node in xmlNodeList)
{
//修改此节点的属性值
if (node.Name.Equals("Name"))
{
node.InnerText = "9999";
}
Console.WriteLine(node.Value);
}
//要想使对xml文件所做的修改生效,必须执行以下Save方法
myXmlDoc.Save(path);
Console.WriteLine("\r\n******** 修改XML文件 开始 *****************\r\n");
}
//添加节点
private static void AddXMLNode()
{
Console.WriteLine("\r\n******** 添加节点 开始 *****************\r\n");
XmlDocument myXmlDoc = new XmlDocument();
myXmlDoc.Load(path);
//添加一个带有属性的节点信息
//foreach (XmlNode node in myXmlDoc.SelectSingleNode("/Student/Sex").ChildNodes)
//{
// XmlElement newElement = myXmlDoc.CreateElement("color");
// newElement.InnerText = "black";
// newElement.SetAttribute("IsMixed", "Yes");
// node.AppendChild(newElement);
//}
XmlNode node = myXmlDoc.SelectSingleNode("/Student/Address");
XmlElement newElement = myXmlDoc.CreateElement("AddressDetail");
newElement.InnerText = "广州";
newElement.SetAttribute("IsMixed", "Yes");
node.AppendChild(newElement);
//保存更改
myXmlDoc.Save(path);
Console.WriteLine("\r\n******** 添加节点 结束 *****************\r\n");
}
//删除节点
private static void DeleteXMLNode()
{
Console.WriteLine("\r\n******** 删除最后一个节点 开始 *****************\r\n");
XmlDocument myXmlDoc = new XmlDocument();
myXmlDoc.Load(path);
XmlNode node1 = myXmlDoc.SelectSingleNode("/Student/Sex");
XmlNode node2 = myXmlDoc.SelectSingleNode("/Student/Sex/sex1");
node1.RemoveChild(node2);
//foreach (XmlNode node in xmlNodeList)
//{
// //记录该节点下的最后一个子节点(简称:最后子节点)
// XmlNode lastNode = node.LastChild;
// //删除最后子节点下的左右子节点
// lastNode.RemoveAll();
// //删除最后子节点
// node.RemoveChild(lastNode);
//}
//保存对xml文件所做的修改
myXmlDoc.Save(path);
Console.WriteLine("\r\n******** 删除最后一个节点 结束 *****************\r\n");
}
}
/*
XmlTextReader reader = new XmlTextReader(path);
reader.MoveToContent();
document.LoadXml(reader.ReadOuterXml());
*/
C# 基础--操作XML
最新推荐文章于 2023-06-22 16:15:26 发布