C# 关于XML遍历新增节点,修改属性小例

简介: XML样例: <?xml version="1.0" encoding="gb2312"?><bookstore> <book genre="李2红" ISBN="2-3631-4"> <title>CS从入门到精通</title> <author>候捷</author>
XML样例:
 
  

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="李2红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </book>
  <book genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>小六</author>
    <price>58.3</price>
  </book>
  <book45 genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>大黄</author>
    <price>58.3</price>
  </book45>
</bookstore>

测试代码:
	    XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("E:\\bookstore.xml");
	    //获取bookstore节点的所有子节点
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("bookstore").ChildNodes;
            for (int i = 0; i < nodeList.Count; i++)//遍历每个book节点
            {   //将子节点类型转换为XmlElement类型
                XmlElement xe = (XmlElement)nodeList.Item(i);
                if (xe.Name == "book")
                {   //如果genre属性值为“李赞红”
                    if (xe.GetAttribute("genre") == "李赞红")
                    {    //继续获取xe子节点的所有子节点
                        XmlNodeList nls = xe.ChildNodes;
                        for (int j = 0; j < nls.Count; j++)
                        {
                            XmlElement xe2 = (XmlElement)nls.Item(j);//转换类型
                            //title、author、price都会在xe2.Name中取到
                            if (xe2.Name == "author")//如果找到
                            {
                                xe2.InnerText = "Karli Waston";//则修改
                            }
                            else //如果不存在则新建
                            {
                                xe2.SetAttribute("NewAttribute", "新增属性");
                            }
                        }
                    }
                    else
                    {
                        //如果genre属性值不为“李赞红”,则修改为李赞红
                        xe.SetAttribute("genre", "李赞红");
                    }
                }
                else //如果不存在book节点,则在该节点下新增一个book下级节点
                {
                    XmlElement subElement = xmlDoc.CreateElement("因为这个节点不是book");
                    subElement.InnerXml = "BigDog";
                    xe.AppendChild(subElement);
                }
            }
            xmlDoc.Save("E:\\bookstore.xml");//保存。
修改后的XML:
 
  

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </book>
  <book genre="李赞红" ISBN="2-3631-4">
    <title NewAttribute="新增属性">CS从入门到精通</title>
    <author>Karli Waston</author>
    <price NewAttribute="新增属性">58.3</price>
  </book>
  <book45 genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>大黄</author>
    <price>58.3</price>
    <因为这个节点不是book>BigDog</因为这个节点不是book>
  </book45>
</bookstore>
如果现在根节点下新增某个节点,代码如下:

 
  

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("E:\\bookstore.xml");
XmlNode root = xmlDoc.DocumentElement;
XmlElement subElement = xmlDoc.CreateElement("根节点下新增");
subElement.InnerXml = "BigDog";
root.AppendChild(subElement);



相关文章
|
1月前
|
Java
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
10 0
|
3月前
|
存储 安全 编译器
C# 11.0中的泛型属性:类型安全的新篇章
【1月更文挑战第23天】C# 11.0引入了泛型属性的概念,这一新特性为开发者提供了更高级别的类型安全性和灵活性。本文将详细探讨C# 11.0中泛型属性的工作原理、使用场景以及它们对现有编程模式的改进。通过深入了解泛型属性,开发者将能够编写更加健壮、可维护的代码,并充分利用C#语言的最新发展。
|
18天前
|
XML JavaScript 前端开发
XML文档节点导航与选择指南
XPath是XSLT的核心部分,用于XML文档的节点定位和选择。它采用路径表达式语法,包含200多个内置函数处理各种数据类型。XPath在编程语言如JavaScript中广泛使用,与XSLT配合进行XML转换和样式处理。它涉及7种节点类型,如元素、属性和文本,以及多种节点间关系,如父、子、同级等。XPath还使用轴(如ancestor、child)来描述节点间的关联,并支持运算符进行逻辑和数学操作。
27 0
XML文档节点导航与选择指南
|
1月前
|
Java C#
C#学习相关系列之多线程(七)---Task的相关属性用法
C#学习相关系列之多线程(七)---Task的相关属性用法
|
3月前
|
XML JavaScript 数据格式
python - bs4提取XML/HTML中某个标签下的属性
python - bs4提取XML/HTML中某个标签下的属性
29 0
|
3月前
|
开发框架 .NET C#
C# 10.0中的扩展属性与模式匹配:深入解析
【1月更文挑战第20天】C# 10.0引入了众多新特性,其中扩展属性与模式匹配的结合为开发者提供了更强大、更灵活的类型检查和代码分支能力。通过这一特性,开发者可以在不修改原始类的情况下,为其添加新的行为,并在模式匹配中利用这些扩展属性进行更精细的控制。本文将详细探讨C# 10.0中扩展属性与模式匹配的工作原理、使用场景以及最佳实践,帮助读者更好地理解和应用这一新功能。
|
3月前
|
运维 编译器 C#
C# 9.0中的本地函数属性:深化函数级别的控制
【1月更文挑战第17天】C# 9.0引入了本地函数属性的概念,允许开发者在本地函数上应用属性,从而进一步细化对函数行为的控制。这一新特性不仅增强了代码的可读性和可维护性,还为函数级别的编程提供了更多的灵活性。本文将探讨C# 9.0中本地函数属性的用法、优势以及可能的应用场景,帮助读者更好地理解并应用这一新功能。
|
4月前
|
XML 存储 JSON
C# | 使用Json序列化对象时忽略只读的属性
将对象序列化成为Json字符串是一个使用频率非常高的功能。Json格式具有很高的可读性,同时相较于XML更节省空间。 在开发过程中经常会遇到需要保存配置的场景,比如将配置信息保存在配置类型的实例中,再将这个对象序列化成为Json字符串并保存。当需要加载配置时,则是读取Json格式的字符串再将其还原成配置对象。在序列化的过程中,默认会将所有公开的属性和字段都序列化进入Json字符串中,这其中也会包含只读的属性或字段,而只读的属性和字段在反序列化的过程中其实是无意义的,也就是说这一部分存储是多余的。 本文将讲解如何在执行Json序列化时,忽略掉那些只读的属性和字段。
54 0
C# | 使用Json序列化对象时忽略只读的属性
|
4月前
|
XML 前端开发 Java
web.xml中项目常见配置与节点加载顺序详解
web.xml中项目常见配置与节点加载顺序详解
37 0
|
5月前
|
前端开发 C# 开发工具
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
105 0