XML文件的读取

Qt编程之Xml文件的读取 目录 一、xml的格式说明 二、QT中读取xml的类与常用函数 三、代码思路 四、代码实现 五、结果展示 XML最主要的功能是数据传输,有的时候可以当一个小型的数据库来使用,因为其定义标签高度自由,所以在一些软件需要经常修改的配置变量常常采用xml格式的文件来保存,在需要用到该变量时在事先写好的xml类型文件中进行修改。 本篇博客给出的代码从如何完整读出一个xml文件的思路出发。 逻辑难度不大,但需要读者耐心琢磨。方能写出一个属于自己的读取xml的通用函数。 如果读者对x... 阅读详情

xml文件读取方法

  • XmlDocument:需要将整个xml文件加载到内存,大型xml文件不建议使用这种方法。
  • XmlTextReader: 保持连接逐条读取,只能向下读取,占用内存很小,适用于大型xml文件。
  • Linq to Xml: 语法简单易易理解

XmlDocument:

读取:

   ////创建XMLDocument对象
   XmlDocument xmldoc=new XmlDocument();
   XmlReaderSettings settings=new XmlReaderSettings();
   
   //忽视注释
   settings.IgnoreComments=true;
   XmlReader reader=XmlReader.Create(@"url",settings);
   
   //加载Xml文件到内存
   xmldoc.Load(reader);
   
   //得到根节点
   XmlNode rootNode=xmldoc.SelectSingleNode("rootname");

   //得到rootname节点下的所有子节点
   XmlNodeList nodes = rootNode.ChlidNodes;

   //遍历nodes
   for(XmlNode node in nodes){

       XmlElement xeNode=(XmlElement)node; 
       //得到指定名称ename的属性值
       var s = xeNode.GetAttribute("ename").ToString();

       XmlNodeList nodecc = xeNode.ChildNodes;
       
       //得到当前节点的下标为index的子节点的值 
       nodecc.Item(index).innerText;
     }
    reader.Close();//最后读取完毕,关掉reader

添加:

    XmlDocument xmldoc=new XmlDocument();
    xmldoc.Load(@"..\..\..\**.xml");
    
    //找到跟节点rootname
    XmlNode root=xmldoc.SelectSingNode("rootname");

    //创建新元素node => [<book Type="ssss"> </book> ]
    XmlElement node = xmldoc.CreateElement("book");

    //创建节点属性
    XmlAttribute nodeAttr = xmldoc.CreateAttribute("Type");
    nodeAttr.InnerText="ssss";
    
    //属性绑定到节点上
    node.SetAttributeNode(nodeAttr);
    
    //创建新元素nodec => <author>dddd</author>
    XmlElement nodec=xmldoc.CreateElement("author");
    nodec.InnerText="dddd";//设置元素文本内容
    
    //添加到node节点中
    node.AppendChild(nodec);

    //添加到root节点中
    root.AppendChild(node);
    xmldoc.Save(@"..\..\..\**.xml");

清空

    XmlDocument xmldoc=new XMLDocument();
    xmldoc.load("");
    
    xmldoc.Save(@"..\..\Book.xml");

 

删除节点

    XmlDocument xmldoc = new XmlDocument();
    xmldoc.Load(@"..\..\..\**.xml");

    //DocumentElement获取xml文档对象的根XmlElement
    var root = xmldoc.DocumentElement;
    string xePath = $"/bookstore/book[@ISBN=\"{attrname}\"]";

    var node = (XmlElement)root.SelectSingleNode(xePath); 
    node.ParentNode.RemoveChild(tagElement );

    xmldoc.Save(@"..\..\..\**.xml")
     
修改
    var xmldoc = new XmlDocument();
    xmldoc.Load(@"..\..\..\**.xml");
   
    var root = xmldoc.DocumentElement;
    string xePath = $"/bookstore/book[@ISBN=\"{attrname}\"]";

    //selectSingleNode 根据XPath表达式,获得符合条件的第一个节点.
    var node = (XmlElement)xe.SelectSingleNode(xePath); 
  
    node .SetAttribute("Type", "999");
    node.GetElementsByTagName("title").Item(0).InnerText = "title";
    node.GetElementsByTagName("author").Item(0).InnerText = "authot";
    
    xmldoc.Save(@"..\..\Book.xml");

XmlTextReader XmlTextWriter

XmlTextReader

 //创建读取流
 var reader=new XmlTextReader(path);
 
 //开始读取
 while(reader.Read())
 {
      if(reader.NodeType == XmlNodeType.Element)
      {
           switch(reader.Name)
           {
                case "book":
                    for(int i=0;i<reader.AttributeCount;i++){
                        reader.MoveToAttribute(i);
                        string str = "属性:" + reader.Name + "=" + reader.Value;
                    }
                   //获取节点指定索引的属性值
                   reader.GetAttribute(0);
                   reader.GetAttribute(1);
                case "title":
                   reader.ReadElementString().Trim();
                case "author":
                   reader.ReadeElementString().Trim();
           }
      }
      if(reader.NodeType == XmlNodeType == EndElement)
      {
           booklist.Add(model);
           model= new Book();
      }          
   }

  bookList.RemoveAt(modelList.Count-1);

XmlT写xml文件时默认覆盖原文件,如果原文件不存在则创建新文件extWriter

    var writer = new XmlTextWriter(@"..\..\**.xml", null);     
    writer.Formatting=Formatting.Indented;
    writer.WriteStartDocument(flase);

    //root节点
    writer.WriteStartElement("root");
        //创建注释
        writer.WriteComment("图书信息");
        writer.WriteStartElement("book");//创建图书节点
            writer.WriteAttributeString("Type", "选修课");//创建设置属性值
            writer.WriteAttributeString("ID", "111111111");
            writer.WriteElementString("author","卡耐基");//创建单个节点
            writer.WriteElementString("title", "人性的弱点");
            writer.WriteElementString("price", "56.00");
        writer.WriteEndElement();//图书节点创建完成

     //root节点
    writer.WriteEndElement();

    writer.Flush();
    writer.Close();

Linq 查询读取 Xml文件

 
   var xmldoc = XElement.Load(@"..\..\**.xml");

   //查询出所有标签名nodename的元素
   var nodes = from node in xmldoc.Elements("nodename") 
                  select xmldoc;

   foreach (var node in nodes)
   {
       //获取属性attrname的值
       node.Attribute("attrname").Value;
       
       //获取对应名称子nodename的文本内容
       node.Element("nodename").Value;
    }

 

 

插入

 

       var xmldoc = XElement.Load(path);
       var node = new XElement(
           new node("nodename",
              new XAttribute("attrname", "选修课"), 
              new XElement("nodename", "计算机操作系统"),
           )
        );

        xmldoc.Add(record);
        xmldoc.Save(@"..\..\**.xml");

删除指定节点

  
    var xmldoc = XElement.Load(@"..\..\**.xml");

    //linq查找所有匹配的节点
    var nodes = from node in xmldoc.Elements("nodename")
                where (string)node.Attribute("attrname") == attrval
                select node;

    if(nodes.Count()>0)
    {
         nodes.First().Remove();
    }

    xmldoc.Save(@"..\..\**.xml");

修改节点信息

 
  var xmldoc = XElement.Load(@"..\..\**.xml");

  //查询查指定节点
  var nodes =  from node in xmldoc.Elements("nodename")
               where node.Attribute("attrname").Value == attrval
               select ele;

   if (element.Count() > 0)
   {
       XElement first=element.First();
       first.SetAttributeValue("Type","11")
       
       //替换新的节点
       first.ReplaceNodes(
             new XElement("title", "title"), 
             new XElement("author", "author"),
             new XElement("price", "price") 
       );
   }

   xmldoc.Save(@"..\..\**.xml");
读取简单的xml文件 我也不喜欢嵌套很多层的xml,当然某些情况下这样显示起来更加的直白符合逻辑,下面用一个简单的xml来做例子,xml内容如下(名字:CreateHtml.config ):           现在我只想得到web节点下的website项怎么操作呢。只需要用XmlDocument的Load方法将某个路径下的xml文件转 阅读详情

相关推荐

IDL读取XML文件

例如以下XML文件: &lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;&lt;ProductMetaData&gt;      &lt;SatelliteID&gt;GF2&lt;/SatelliteID&gt;      &lt;SensorID&gt;PMS2&lt;/SensorID&gt;&lt;/Prod

deserts Tsung 1995

读取XML的几种方式

dom平台无关,官方解析方式,一次性加载,方便解析,代码容易编写,当文件过大,容易造成内存溢出* sax基于事件驱动的解析方式,加载时进行验证判断,内存耗费小,不易编码,很难同时访问一个xml中的多处不同数据* jdom和dom4j是基于sax扩展* jdom仅使用具体类而不使用接口,api中大量使用了collections类* dom4j是jdom的一种智能分支,具有性能优异,灵活性好,功能强大和易使用的特点。

w2765076540的博客 2324

SpringBoot与Flowable整合:构建高效审批工作流的实战指南

本文是一份SpringBoot与Flowable整合构建高效审批工作流的实战指南。通过一个经典的二级审批场景,详细介绍了从项目搭建、BPMN流程设计、核心服务编写到RESTful API构建的完整步骤。文章深入探讨了如何利用Flowable工作流引擎实现审批流程的自动化驱动与灵活管理,并分享了变量管理、监听器、异步执行等进阶技巧与常见避坑指南,帮助开发者快速构建健壮、可维护的企业级审批系统。

qsc9012345的博客 519

读取xml文件的四种方式

#一、为什么使用XML 1、便于不同应用程序之间通信。 2、便于不同平台之间通信。 3、便于不同平台之间数据共享。 #二、Dom读取 xml文件内容 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="1"> <name>冰与火之歌</na...

withawind的博客 1万+

从 JDK8 到 JDK17:CRMEB 框架升级

【摘要】CRMEB开源框架已成功从JDK8升级至JDK17,带来显著性能提升:并发吞吐量提高35%,响应延迟降低40%,资源占用减少25%。升级方案解决87个技术卡点,支持模块化扩展和微服务转型,兼容SpringBoot3.0等新技术。提供基础版到企业级的升级服务,包含代码重构指导和性能调优。经金融级验证的方案可帮助电商平台实现日均10万+UV承载,支付成功率提升至99.7%。现以低于市场30%的价格提供全周期技术支持,助力企业抢占技术先机。

weixin_39782540的博客 701

antdv-<a-form>的使用

是 Ant Design Vue 中用于创建表单的组件,提供了一种结构化的方式来收集用户输入。它支持多种布局、验证、数据绑定等功能,非常适合用于处理用户输入和提交数据。

2302_81312344的博客 2619

Xml的读取方式

XML 1 每个XML文档都由XML序言开始,在前面的代码中的第一行便是XML序言,<?xml version="1.0"?> 2 任何的起始标签都必须有一个结束标签。 3 标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签。 4 标签如果有属性,属性值必须加双引号。 XML文档读取 “XML中的内容都是结点”,这句话...

My_liuying0901 6068

医学图像中的小目标病灶检测难题:我的硕士研究总结与思考

医学图像中的小目标检测和分割,主要指在CT、MRI、超声等医学影像中识别和分割微小病灶或细小结构。这些小目标通常体积小、边界模糊、特征不明显,却往往是关键病灶,例如肺部小结节、脑微出血、乳腺微钙化等。

weixin_45638136的博客 2370

如何读取XML文件

一、何为xml 定义 XML是可扩展性标记语言,类似于html,有属于自己的标签等元素,其主要的作用如下 1、用来保存数据,而且这些数据具有自我描述性 2、它可以作为项目或者模块的配置文件 3、还可以作为网络传输数据的格式(现在以json为主) 语法 文档声明 元素(标签) xml属性 xml注释 文本区域(CDATA区) 示例如下: 在这里插入代码片 <?xml version="1.0" encoding="UTF-8" ?> <!--以上内容就是xml文件的声明 versi

qq_36908783的博客 4464

CST 2023安装避坑指南:从下载到破解的完整流程(附常见报错解决方案)

本文提供CST 2023三维全波电磁场仿真软件的完整安装指南,涵盖从下载到破解的全流程,并附常见报错解决方案。详细解析安装步骤、许可证配置优化及高频问题诊断,帮助用户快速部署并优化软件性能,适用于射频电路设计、天线优化等场景。

7z8x2c4v6b9的博客 657

工业级隔离CAN FD收发器ISO1042设计实战:从原理到EMC防护

在工业自动化与伺服驱动系统中,CAN总线是实现设备间可靠通信的关键技术。其核心原理是通过差分信号传输和仲裁机制,在复杂电磁环境中实现多节点实时数据交换。这项技术的核心价值在于为高噪声、高干扰的工业现场提供了稳定、确定性的通信基础,是构建分布式控制系统不可或缺的环节。其典型应用场景包括新能源汽车电池管理、工业机器人伺服控制以及光伏逆变器集群通信等。本文将聚焦于如何通过高性能隔离CAN FD收发器(如TI的ISO1042)来应对地电位差、浪涌和高压串扰等现场挑战,深入解析其集成的电气隔离、±70V总线故障保护和

weixin_26834815的博客 388

XML——读取xml文件内容的四种方式

读取xml文件内容有四种方式:分别是DOM,JDOM,SAX,DOM4J,具体是什么此处不再赘述,主要讲如何使用及该选择哪种xml解析方式。 1)DOM4J性能最好,若不考虑可移植性,最好用DOM4J;JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出,在小文件情况下,JDOM和DOM还是值得考虑的,但是DOM仍是一个非常好的选择,DOM实现广泛应用于多种编程语言,它还是许多其

ddm 3145

不加行也能填满:用 ABAP BDC 驯服 Table Control 滚动录制缺陷,批量维护供应商银行账户

摘要 本文探讨了在SAP ECC/S4HANA系统中处理供应商主数据时,Table Control控件带来的批量导入挑战。文章指出,银行账户维护界面中Table Control的滚动动作难以被录制工具捕捉,导致批量导入数据时仅能填充前5行。解决方案是通过BDC_OKCODE显式触发翻页(如=P+),并配合行号拼接(如(01)~(05))将数据写入不可见行。文中提供了完整的ABAP程序示例,展示了如何读取外部文件、动态生成BDCDATA、处理表格翻页逻辑,最终通过CALL TRANSACTION执行XK01事

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 272

python读取XML文件

文章转载:https://mediumcn.com/python3/how-to-read-xml Python自带xml库,可以通过xml.dom读取xml文件。比如有如下xml文件 <?xml version="1.0"?> <company> <name>mediumcn ltd</name> <staff id="1001"> <nickname>Ben</nickname> <salary&

m0_38036750的博客 6788

【k8s故障处理篇】calico-node启动失败“Felix is not live: Get “http://localhost:9099/liveness” 解决办法(V1.30.3版本)

【k8s故障处理篇】calico-node启动失败“Felix is not live: Get “http://localhost:9099/liveness” 解决办法(V1.30.3版本)

jks212454的博客 1091

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java读取XML文件

import java.io.File; import java.sql.SQLException; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; impo...

S.Gerrard的博客 6249

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

unity Xml文件的读取

首先吧需要读取的文件放到该目录下。(我这里读取的是名为item的文件),注意字母不要打错。 这里是item里面的内容 <item> <item1> <id>1</id> <name>china</name> <year>2016</year> </item1&gt...

weixin_43333566的博客 487

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

用javascript读取xml文件

在JavaScript中读取XML文件,通常有几种方法,取决于你的运行环境(如浏览器端或Node.js环境)。

kuixiang_yin的博客 911

C#读取XML文件

C#读取XML文件并建立关系

中国风 3189

matlab读取xml文件

xml文件 (%后面的是注释,可删除) <?xml version="1.0" encoding="UTF-8"?> <Ipf_Job_Order> <Ipf_Conf> <Processing_Parameter> %输入参数 <Name>OutputType</Name> %参数名...

qq_39620453的博客 2648

Qt读取xml文件

主要用到:QXmlStreamReader 头文件加入: private: QLabel *resultL; QPushButton *readBtn; private slots: void readNodeSlot(); 构造函数加入: resultL = new QLabel(this); resultL-&gt;setGeometry(Q...

qiukapi的博客 3961

xml文件基本格式及利用C#读取xml文件

1)xml格式 xml文件全称为extensible markup language,可扩展标记语言。本文以下面这个xml文件来说明xml文件格式。 <?xml version="1.0" encoding="utf-8"?> <root> <person name="WangYao" age="25"/> <person name="Jobs" age="56"/> </root> xml

Ronnie_Hu的博客 2075

用python读取xml文件!

读取XML文件在Python中是一个常见的任务,可以使用内置的xml.etree.ElementTree模块来完成。这是一个轻量级的XML解析库,适合处理大多数XML文件。下面是一个简单的示例代码,展示如何读取XML文件并提取一些信息。

2301_78096295的博客 1731

android的读取xml配置文件,android中XMl文件的读取

废话不多说了直接上代码:新建一个Xml文件用于读取:test.xmljavaEclipseSwiftXcodeC#Visual Studio后台:import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.util.Log;import android.widget.TextView...

weixin_39638048的博客 384

java读取xml文件

最近有项目用到了读取xml文件,修改以后记录下代码,更复杂的xml读取也可以参考 例如需要读取的xml内容如下 <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <SXPY> <Digital> <items Name="state" DataType="int" Desc="描述"></items> </Digital> &l...

sunshine151的专栏 1099
上一篇: 基于jquery实现图片的预览
下一篇: js闭包的应用
wll3241@163.com
博客等级 码龄9年 3粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值