XML 笔记

从零构建工业级SPI-CAN网关:CH347与CH9431的软硬件协同设计实战 本文详细介绍了基于CH347和CH9431芯片构建工业级SPI-CAN网关的完整方案。通过硬件架构设计、Linux驱动定制、并发处理优化和EMC抗干扰测试,实现高可靠性通信网关,适用于工业自动化和汽车电子等严苛环境。 阅读详情

DOM解析原理:一次性把xml文档加载成Document树,通过Document对象得到节点对象,通过节点对象访问xml文档内容(标签,属性,文本,注释)。
缺点:不适合读取大容量xml文件,导致内存溢出。

xml对象的一些方法:

节点:
Iterator  Element.nodeIterator();  //获取当前标签节点下的所有子节点

标签:
  Element  Document.getRootElement();  //获取xml文档的根标签        
  Element   ELement.element("标签名") //指定名称的第一个子标签
  Iterator<Element> Element.elementIterator("标签名");// 指定名称的所有子标签
    List<Element>    Element.elements(); //获取所有子标签

属性:
    String   Element.attributeValue("属性名") //获取指定名称的属性值
    Attribute    Element.attribute("属性名");//获取指定名称的属性对象 

    Attribute.getName()  //获取属性名称
    Attibute.getValue()  //获取属性值

    List<Attribute>  Element.attributes();  //获取所有属性对象
    Iterator<Attribute>     Element.attibuteIterator(); //获取所有属性对象

文本:
            Element.getText();  //获取当前标签的文本
            Element.setText();  //设置当前标签的文本
            Element.elementText("标签名") //获取当前标签的指定名称的子标签的文本内容

xml读取(查)

    public static void main(String[] args) throws Exception{
        List<Contact> list = new ArrayList<Contact>();

        //获得xml文件
        SAXReader reader = new SAXReader();
        Document doc = reader.read(new File("./src/contact.xml"));
        //获得联系人xml的根标签
        Iterator<Element> it = doc.getRootElement().elementIterator("contact");
        while(it.hasNext()){
            Element elem = it.next();
            //遍历Contact,并创建联系人对象且赋值
            Contact contact = new Contact();
            contact.setId(elem.attributeValue("id"));
            contact.setName(elem.elementText("name"));
            contact.setPhone(elem.elementText("phone"));
            contact.setEmail(elem.elementText("email"));
            list.add(contact);
        }

        //遍历打印
        for (Contact contact : list) {
            System.out.println(contact);
        }


    }

xml的增删改

    1 写出内容到xml文档
            XMLWriter writer = new XMLWriter(OutputStream, OutputForamt)
            wirter.write(Document);

    2 修改xml文档的API
        增加: 
                DocumentHelper.createDocument()  增加文档
                addElement("名称")  增加标签
                addAttribute("名称",“值”)  增加属性
        修改:
                Attribute.setValue("值")  修改属性值
                Element.addAtribute("同名的属性名","值")  修改同名的属性值
                Element.setText("内容")  修改文本内容
        删除
                Element.detach();  删除标签  
                Attribute.detach();  删除属性



public void fun() throws Exception{
    //1.创建doc
    //2.添加标签,属性
    //3.写xml
    //4.修改

//创建doc并写xml
        //创建Document对象
//      Document doc = DocumentHelper.createDocument();
        //获得根标签
//      Element rootElem = doc.addElement("students");
        //添加数据
//      addStudent(rootElem,"1","张三","男","计算机1班","中山东区");
//      addStudent(rootElem,"2","李四","女","计算机2班","广州");
//      addStudent(rootElem,"3","傻逼","男","计算机3班","深圳");

//修改id为2的学生的名字为"莉莉"
        //获得已经存在的xml文件
//      SAXReader reader = new SAXReader();
//      Document doc= reader.read("E:/student.xml");
//      
//      Element rootElem = doc.getRootElement();
//       List stuElems= rootElem.elements();
        //找到id为2的student标签
//       for (Object object : stuElems) {
//           Element stuElem = (Element)object;
//           //获得student标签的属性id
//          if(stuElem.attribute("id").getValue().equals("2")){
            //修改student标签下的name标签的文本
//              stuElem.element("name").setText("莉莉");
//          }
//      }

//删除id为2的学生
    //获得已经存在的xml文件
    SAXReader reader = new SAXReader();
    Document doc= reader.read("E:/student.xml");

    Element rootElem = doc.getRootElement();
     List stuElems= rootElem.elements();
    //找到id为2的student标签
     for (Object object : stuElems) {
         Element stuElem = (Element)object;
         //找到id为2的student标签
        if(stuElem.attribute("id").getValue().equals("2")){
            //将id为2的学生标签删除
            stuElem.detach();
        }
    }

    //获得漂亮格式的OutputFormat对象
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("utf-8");
    //用XMLWriter写xml文件
    XMLWriter writer = new XMLWriter(new FileOutputStream("E:/student.xml"),format);
    //调用wirte()方法就能够写xml
    writer.write(doc);
    //记得关流
    writer.close();
}

public void addStudent(Element elem,String id,String name,String gender,String grade,String address){
    Element stu = elem.addElement("student");
    stu.addAttribute("id", id);
    Element nameElem = stu.addElement("name");
    nameElem.setText(name);
    stu.addElement("gender").setText(gender);
    stu.addElement("grade").setText(grade);
    stu.addElement("address").setText(address); 
}

xpath 技术

用于快速获取所需的节点对象

        使用xpath方法
            List<Node>  selectNodes("xpath表达式");   查询多个节点对象
            Node       selectSingleNode("xpath表达式");  查询一个节点对象

        3.4 xPath语法
            /      绝对路径      表示从xml的根位置开始或子元素(一个层次结构)
            //     相对路径       表示不分任何层次结构的选择元素。
            *      通配符         表示匹配所有元素
            []      条件           表示选择什么条件下的元素
            @       属性            表示选择属性节点
            and     关系          表示条件的与关系(等价于&&)
            text()  文本           表示选择文本内容

xml–SAX解析

1.创建SAXParser对象  
  SAXParser parser=SAXParserFactory.newInstance().newSAXParser();
 2.调用parse方法
parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());
                [一个类继承class 类名(extends DefaultHandler)  在调用是创建传进去

    DefaultHandler类的API:
            void startDocument()  :  在读到文档开始时调用
            void endDocument()  :在读到文档结束时调用
            void startElement(String uri, String localName, String qName, Attributes attributes)  :读到开始标签时调用                
            void endElement(String uri, String localName, String qName)   :读到结束标签时调用
            void characters(char[] ch, int start, int length)  : 读到文本内容时调用

dom解析 和 SAX解析 的区别

                ============DOM解析    vs   SAX解析     ========

     DOM解析                                            SAX解析
原理: 一次性加载xml文档,不适合大容量的文件读取            原理: 加载一点,读取一点,处理一点。适合大容量文件的读取
DOM解析可以任意进行增删改成                              SAX解析只能读取
DOM解析任意读取任何位置的数据,甚至往回读                  SAX解析只能从上往下,按顺序读取,不能往回读
DOM解析面向对象的编程方法(Node,Element,Attribute)     SAX解析基于事件的编程方法

DTD 约束

1)导入dtd方式

内部导入

<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to      (#PCDATA)>
<!ELEMENT from    (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body    (#PCDATA)>
]>

外部导入
本地文件系统:                                 
<!DOCTYPE note SYSTEM "note.dtd">

公共的外部导入:                
<!DOCTYPE 根元素 PUBLIC "http://gz.itcast.cn/itcast.dtd">

2)DTD语法
    约束标签
        <!ELEMENT 元素名称 类别>  或 <!ELEMENT 元素名称 (元素内容)>

    类别:
            空标签: EMPTY。 表示元素一定是空元素。
            普通字符串: (#PCDATA)。表示元素的内容一定是普通字符串(不能含有子标签)。
            任何内容: ANY。表示元素的内容可以是任意内容(包括子标签) 

    (元素内容):
            顺序问题:
                <!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 按顺序出现子标签

            次数问题:
                    标签    :  必须且只出现1次。
                    标签+   : 至少出现1次
                    标签*   : 0或n次。
                    标签?   : 0或1次。
    约束属性
            <!ATTLIST 元素名称 属性名称 属性类型 默认值>

        默认值:
                #REQUIRED 属性值是必需的 
                #IMPLIED   属性不是必需的 
                #FIXED value 属性不是必须的,但属性值是固定的

        属性类型:控制属性值的
            CDATA :表示普通字符串 
            (en1|en2|..): 表示一定是任选其中的一个值
            ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头
[数学建模][2012年A国赛模拟] 3. 葡萄酒的评价 暑期学校数学建模培训第三次模拟:2012年国赛A题,一道完全统计方面的题目。据老师反映当年有位老师所带领小组取得“全国10佳优秀论文奖”,我们大组搞统计的老师建模能力不行,但其统计理论非常扎实,在此期间给予我们非常大的帮助,十分感谢老师的倾囊相授。我们小组的定位也不在统计方向,主攻物理建模及优化模型,故本次模拟就用SPSS软件简单做了下,还是学到了多元统计的许多知识,达到了本次训练的目的。 ... 阅读详情

相关推荐

51雾化器实现

1. 雾化器简介 雾化器是将试液雾化的一种器械。雾化器是原子化系统的重要部件,其性能对测定的精密度和化学干扰等产生显著影响。因此要求雾化器喷雾稳定、雾滴细小、均匀和雾化效率高。雾化器的类型有超声雾化器,空气压缩式雾化器,网式雾化器。超声雾化器因其价格合适,适合家用,被广泛应用于加湿器,香薰机等各种小家电,也在医疗领域有很多的应用。家用雾化器的主要器件是一枚雾化片。 家用雾化器分为两种不同类别雾化片,实孔雾化片和微孔雾化片,这两种的喷雾方法和工作原理是有所不同的。不同的雾化片需要特定的频率才能工作。 实孔雾

qq_42415953的博客 2万+

XML复习

学校要进行期末考试,复习的时候总结了这些,可能有错误,还请批评指正 包含了XML,DTD,Schema,XSL的内容,应该不全

qq_62904742的博客 474

springboot + netty 实现多客户端登录 超出设备 并下线

本文档旨在详细描述多平台登录控制的需求和实现方案。当前系统仅支持单设备登录,需扩展为支持多设备同时在线,并提供多种登录策略。文档详细列出四种策略:单平台登录、双平台登录、三平台登录和多平台同时在线,每种策略的具体限制和支持平台。技术实现方案包括数据结构设计、NettyUtils 工具类方法、WebSocketHandler 修改,以及相应的测试方案

Likefr 1878

解析 xml 文件 - xml.etree ElementTree

假设有xml文件内容如下: 1、导入模块 →\rightarrow→ 读取文件 →\rightarrow→ 获取根节点 →\rightarrow→ 获取根节点的标签与属性 2、遍历一级子节点、获取子节点的标签 与 属性 3、通过索引 获取数据 rootrootroot是根节点 root[0]root[0]root[0] 是下一级子节点的第1个元素 root[0][1]root[0] [1]root[0][1]是下二级子节点的第2个元素 4、Element.findall()、Element.fin

weixin_37804469的博客 1208

Windows系统下载安装 Git 的详细教程

本文详细介绍了Windows系统下载安装Git的完整流程,包括从Git官方网站和阿里镜像下载安装包,逐步讲解安装向导中的各个设置选项,如安装路径、默认编辑器、行尾转换、终端模拟器等,并提供了每个步骤的截图和说明。安装完成后,博客还介绍了如何验证安装是否成功,以及如何配置Git的用户名和邮箱,确保可以正常使用Git进行版本控制。

加斯顿工程师的博客 802

攻克反光难题!YOLOv9工业缺陷检测实战:高反光件、微小划痕精准识别(附抗反光代码+产线数据)

文章摘要:本文针对不锈钢、铝合金等高反光工业件的缺陷检测难题,提出了一套“硬件抗反光+YOLOv9小目标增强”的解决方案。通过分析反光干扰(镜面/漫反射)和微小划痕(0.1mm级)两大核心问题,详细介绍了500万像素工业相机+偏振光源的硬件配置方案,以及基于偏振图像融合和超分辨率放大的预处理方法。最终实现误检率1.2%、微小划痕检出率99.3%的工业级检测效果,并提供了可落地的代码实现和车间实测数据。(148字)

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1041

Java解析Xml文件—判断Xml文件的节点是否存在子节点_以及对节点下不同子节点的内容解析方式

Java解析xml文件判断节点是否存在子节点以及对子节点属性获取

lwt_shine的专栏 1万+

10、利用智能合约实现公平的私有集合交集

本文探讨了利用智能合约实现公平的私有集合交集(PSI)的多种协议,重点分析了协议 Π 和 Π∗ 的气体成本与性能特点。同时对比了包括 Justitia 和 Anesidora 在内的现有方案,突出了仅使用智能合约实现硬币补偿公平性的优势。文中还介绍了相关密码学基础、安全模型及隐私保障机制,为在不同应用场景下选择高效、安全的 PSI 协议提供了理论支持和实践指导。

linux的博客 96

element ui的el-tree多选树(复选框)父子节点关联不关联的问题,选中当前节点,他的子节点和父节点是否被选中,非常详细

element ui的el-tree多选树(复选框)父子节点关联不关联的问题,选中当前节点,他的子节点和父节点是否被选中,非常详细 属性check-strictly 官方文档提供属性check-strictly,在显示复选框的情况下,是否严格的遵循父子不互相关联的做法,默认为 false。 而此属性的意思是: **默认false,父子关联。**有如下现象及问题: 1、当你通过函数设置勾选节点的时候,只要父节点被勾选子节点必会勾选上,即便设置勾选的list中无此子节点。 2、当你点击勾选复选框时候,若点击父节

sunrj_niu的博客 1万+

【博文汇总】I2C总线学习

将这一周学习I2C总线的文章汇总一下。 基础知识学习 触发器的建立时间和保持时间 如何学习总线技术 TTL电平和CMOS电平 深入理解 关于I2C和SPI总线协议 I2C总线深入浅出 I2C总线信号时序总结 对I2C总线协议的一些理解 对I2C总线的时钟同步和总线仲裁的深入理解 I2C总线学习终结,开始SPI总线的学习 深入理解IIC总线时序

ce123的技术博客 6215

ImportError: DLL load failed: 找不到指定的程序的解决方案

本文主要介绍了ImportError: DLL load failed: 找不到指定的程序的解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 18万+

XML判断某一节点是否为空

由于XML的内容有些地方不规范,导致有的数据节点有,有的没有,但是在插入的时候获取节点时,获取不到就会提示空指针异常。 本来想用XPath语法来解决此问题,但是XPath可以查询整个文档中是否存在此节点,针对我目前的这种情况无法做判断处理,所以我就采用了最原始的办法来做 try { //获取节点unit的文字值,如果获取不到,则捕获异常,将属性赋值为""空字符串 String unit = commonElm.element("unit").getText(); snapshotPo

LeeYuChao的博客 2476

Lasso的原理及其与其他特征选择方法的比较进行阐述,然后讨论Lasso优点、缺点以及应用场景,最后给出了代码实例

在机器学习领域中,特征选择(feature selection)是指在模型训练前对数据集进行分析,选择其中有助于预测目标变量或影响模型性能的特征,去除不相关或冗余的特征,提升模型的泛化能力。而Lasso回归是一种很流行的用于特征选择的方法之一。Lasso回归(又称LASSO,least absolute shrinkage and selection operator)是一种线性模型中的特征选择方法。

AI天才研究院 3051

xml数据库操作笔记

这个笔记是在自己学习的过程中根据实际用到的和学到的整理出来的,可能会有缺失,错误等,主要是给激励自己学习,遇到写不下去的情况给自己一个参考,请各位大佬发现问题提出问题时能嘴下留情,也希望多提建议,谢谢。本笔记长期更新(更新日期2024年9月15日)

2403_86693263的博客 2488

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【学习中】---XML笔记

XML笔记: eXtendsible markup langguage 可扩展的标记语言 XML 有什么作用? 1、可以用来保存数据 2、可以用来做配置文件 3、数据传输载体 文档声明 简单声明,version:解析这个xml,是使用什么版本的解析器 <? xml version="1.0" ?> encoding:解析xml中的文字时,使用什么编码来翻译。 <? xml ver...

Mrchai521的博客 1249

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Note_XML学习笔记

学习网址:https://www.runoob.com/xml/xml-attributes.html。

qq_51407861的博客 735

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

XML 基础 学习笔记

XML 学习笔记

lemossrkilakila 456

SAX解析XML笔记

关于基本操作,请参考:Java用SAX解析XML,这里不重复造轮子了,以下是个人笔记: 转载于:https://www.cnblogs.com/yw0219/p/7613102.html

weixin_30703911的博客 77

XML学习笔记

跟随 w3school XML教程 的脚步一点点摸索 XML(eXtensible Markup Language):可扩展标记语言,被设计用来传输和存储数据 文章目录XML基础XML 是不作为的XML具有自我描述性:XML有树结构几个语法规则:元素命名习惯属性XML SchemaXML验证器 -- 检查 XML 文件的语法XML JavaScriptXML 高级XML 实例/测验 XML基础...

keyball123的博客 288

【mybatis】学习笔记之conf.xml与mapper.xml配置

在学习mybatis时,发现对配置文件的要求严格,这里进行笔记: 1.mapper.xml与conf.xml文件需要文件头,可以在mybatis的文档里查找到 2.配置mapper.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org...

weixin_30471065的博客 220

XML Base学习笔记

XML Base学习笔记张小根1、XML Base提供了一种通过显式的指定一个基准URI(base URI),并通过此base URI来解析指向外部资源的相对URI的方式。具体是通过指定XML元素的xml:base属性来实现的。2、目前只有三个有关XML的规范是基于XML Base的,将其作为他们标准引用的一部分:XLink、XML InfoSet、Cannonical XML。其他的

2137

javaweb笔记。9.3 XML映射文件

XML映射文件。

2401_87427517的博客 127

dom4j解析XML文件学习笔记

dom4j解析XML文件学习笔记 dom4j中的四个关键类 Document 整个文档对象类 Element 标签对象类 Attribute 属性对象类 Text 文本对象类 XML文件结构 dom4j解析XML文件 获取解析器对象 SAXReader reader = new SAXReader(); 读取XML文件,生成Document对...

博客 370

XML笔记

XML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记语言)的一个子集。XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的。W3C在1998年2月发布1.0版本;W3C在2004年2月发布1.1版本,但因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。我们要学习的还是1.0版本!!!元素!!!文档声明!!!

2401_88153531的博客 708

将 Journal 笔记转换为 XML、SVG 和 OneNote

说明如何利用 Journal Reader Supplemental Component 将 Journal 笔记转换为 XML,然后再将其转换为可缩放矢量图形 (SVG),以便在 Web 或 Pocket PC 上查看。点击此处阅读全文

2207

C#学习笔记XML与树状菜单

C#学习笔记:XML与树状菜单 --------------------------------------XML----------------------------------- XML文件概述    XML被称为可扩展标记性语言,是eXtensible Markup Language的缩写。在.NET框架中是非常重要的一部分,它用于描述数据,是当前处理结构化文档信息的有力工具

CrazyDream_的专栏 2602
上一篇: com.sun.proxy.$Proxy4 cannot be cast to spring.HelloService
下一篇: JAVA 实现的 生成验证码图片 工具类
_jayjune
博客等级 码龄11年 3粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值