Java解析xml文件之增删改查

34、Java——一个案例学会Dom4j解析技术对XML文件的增删改查 使用Dom4j解析技术实现对animal.xml文件进行增删改查操作 阅读详情

XML是什么:
可扩展的标记语言

XML能干什么:
描述数据、存储数据、传输(交换)数据。

XML文档节点类型:
u     文档(document)

u     元素(element)

u     属性(attribute)

u     文本(PCDATA--parsed character data)

u     注释(comment)

u     DOCTYPE :主要验证文档内容的正确性

u     实体(ENTITIES)

u     CDATA(character data)

XML语法:
1、声明:<?xmlversion="1.0" encoding="UTF-8"?>

2、根节点:必须有一个根节点

3、标签:标签必须有结束且区分大小写,标签必须顺序嵌套

4、属性:必须引号引起值

5、空格会被保留,HTML空格最多保留一个

6、命名规则:命名必须见名知意

     a)名字可包含字母、数字以及其他的字符 

     b)名字不能以数字或者标点符号开始

     c)名字不能以字符“xml”(或者XML、Xml)开始

7、名字不能包含空格

8、 不应在 XML 元素名称中使用 ":" ,这是由于它用于命名空间(namespaces)的保留字。

9、标签优先于属性。

10、XML 命名空间可提供避免元素命名冲突的方法。

11、CDATA:字符数据,<![CDATA[字符数据]]> ,字符数据不进行转义

首先,新建一个文件用于存储数据:

File file = new File("E:/infos.xml");
        if(!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

新建一个person类:

public class Person {
    String name;
    String gender;
    String phone;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public Person(String name, String gender, String phone) {
        super();
        this.name = name;
        this.gender = gender;
        this.phone = phone;
    }
}

添加节点:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setIgnoringElementContentWhitespace(false);
        DocumentBuilder builder = null;
        try {
            builder = factory.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Document document = builder.newDocument();
        List<Person> people = new ArrayList<Person>();
        Person p1 = new Person("Amy","femal","1234567");
        Person p2 = new Person("Jack","male","23132133");
        Person p3 = new Person("Alice","femal","21312432");
        people.add(p1);
        people.add(p2);
        people.add(p3);
        Element peopleElement = document.createElement("people");
        for(int i=0;i<people.size();i++) {
            Element personElement = document.createElement("person");
            Element nameElem = document.createElement("name");
            nameElem.setTextContent(people.get(i).getName());
            Element genderElem = document.createElement("gender");
            genderElem.setTextContent(people.get(i).getGender());
            Element phoneElem = document.createElement("phone");
            phoneElem.setTextContent(people.get(i).getPhone());
            
            personElement.appendChild(nameElem);
            personElement.appendChild(genderElem);
            personElement.appendChild(phoneElem);
            
            peopleElement.appendChild(personElement);
        }
        document.appendChild(peopleElement);
        trans(document,file);

    private static void trans(Document document, File file) {
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer;
        try {
            transformer = transformerFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");// 增加换行缩进,但此时缩进默认为0
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "3");// 设置缩进为2
            transformer.setOutputProperty("encoding", "UTF-8");
            StringWriter writer = new StringWriter();
            transformer.transform(new DOMSource(document), new StreamResult(writer));
            transformer.transform(new DOMSource(document), new StreamResult(file));
            writer.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

info.xml结果:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<people>
   <person>
      <name>Amy</name>
      <gender>femal</gender>
      <phone>1234567</phone>
   </person>
   <person>
      <name>Jack</name>
      <gender>male</gender>
      <phone>23132133</phone>
   </person>
   <person>
      <name>Alice</name>
      <gender>femal</gender>
      <phone>21312432</phone>
   </person>
</people>

修改节点,以修改Amy的电话号码为例:

File file = new File("E:/infos.xml");
Person p = new Person("Amy","femal","7654321");
revicePerson(file,p);

private static void revicePerson(File file,Person p) {
        Document document = getDocument();  
        NodeList list = document.getElementsByTagName("person");
        for (int i = 0; i < list.getLength(); i++) {
            Element element = (Element) list.item(i);
            String value = element.getAttribute("name");
            if (p.getName().equals(value)) {
                element.getElementsByTagName("gender").item(0).setTextContent(p.getGender());
                element.getElementsByTagName("phone").item(0).setTextContent(p.getPhone());
            }
        }
        trans(document,file);
    }

查询信息,以查询Jack的信息为例:

String userName = "Jack";
        Person Jack = findPerson(userName);

private static Person findPerson(String userName) {
        Document document = getDocument();  
        NodeList list = document.getElementsByTagName("person");
        for (int i = 0; i < list.getLength(); i++) {
            Element element = (Element) list.item(i);
            String value = element.getAttribute("name");
            if (userName.equals(value)) {
                Person p = new Person();
                p.setName(userName);
                p.setGender(element.getElementsByTagName("gender").item(0).getTextContent());
                p.setPhone(element.getElementsByTagName("phone").item(0).getTextContent());
                return p;
            }
        }
        return null;
    }

删除信息,以删除Alice为例:

String userName = "Alice";
        deletePerson(file,userName);

private static void deletePerson(File file,String userName) {
        Document document = getDocument();  
        NodeList list = document.getElementsByTagName("person");
        for (int i = 0; i < list.getLength(); i++) {
            Element element = (Element) list.item(i);
            String value = element.getAttribute("name");
            if (userName.equals(value)) {
                element.getParentNode().removeChild(element);
                break;
            }
        }
        trans(document,file);
    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

用java读取修改xml文件的代码实现 通过不同的库方法读取修改xml文件。通过java实现。代码易懂 立即下载

相关推荐

java xml增删改查多种方法

java写的关于xml文档的解析,有关增删改查全方面的操作,而且有多种不同的方法

java对xml文件的操作_# java对xml文件的基本操作

下面是简单的总结三种常用的java对xml文件的操作1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这种方式可以进行增删改查的操作。2. sax方式进行xml的操作,这种方式则不是将整个xml文档读入到内存中进行操作,sax的操作方式是实时将文档中的数据进行处理,这种方式是一个标签一个标签的进行读取,然...

weixin_36106506的博客 649

XML解析(增删改查)操作

一个完整示例可让你节省很多保贵的时间!花五分值!!! 一句简单的代码就可以得到XML中name节点的值String name = xml.getProperty("system/name");

使用Xalan进行XSLT程序设计--使用Java扩展XSL

Xalan支持使用Java扩展XSLT。而且使用Java扩展XSLT不需要其他类库支持,因此使用Java扩展XSLT是一个很方便的选择。 下面我们就来详细讨论使用Java扩展xsl的方法。另外从使用javascript扩展我们也看到,javascript扩展很难应用于多个xsl文件,而用java进行扩展就可以非常容易地实现。在使用java进行xsl扩展地时候,我们需要写一个java类。在这个类

1599

写给音响工程师的科普文章(二)——从模电角度去了解调音台话放

    上一篇讲到调音台第一级放大电路为差分放大器,关于差分放大器的基础知识可以参考以下资料:https://wenku.baidu.com/view/e6a46aaa2af90242a995e537 在教材中的差分放大器基本形式是这样子的,在实际电路中把RE电阻换成两个2倍RE,于是变成这样 然后我们现在来对比调音台中的差分放大器和教材中的有什么区别,我就拿yamaha 01V 96来说...

huanghaoAudio的博客 7701

VSCode下载、安装+C语言环境配置(超详细)

ps:我的更改部分:"D:/BaiduNetdiskDownload/x86_64-8.1.0-release-win32-seh-rt_v6-rev0/mingw64。③ 找到【系统变量】中的【Path】变量 ---- 双击打开后,将刚刚复制的地址添加进去 ---- 点击【确定】;① 双击【此电脑】---- 点击【属性】---- 进入到下面这个界面,单击【高级系统设置】;② 进入到 系统属性界面 ---- 点击【环境变量】,进入环境变量页面;并进行安装,安装成功后,打开VSCode;

weixin_48820458的博客 1万+

【XML】Java创建XML文档

package example01; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.Parser...

萌狼蓝天の技术栈 1833

Cadence Design Entry HDL 使用教程

Cadence Design Entry HDL 使用教程 前言 cadence Design Entry HDL是cadence内部集成的一款板级的EDA设计工具,早期叫 concept HDL。其为cadence最早的原配板级电路图绘制工具,只不过由于后来cadence收购了orcad然后就将旗下的capture CIS收入其中,由于后者使用起来上手简单,所以后者更为大家所熟知。虽然大家对...

uio159753的博客 4万+

Java更新XML的四种常用方法简介

  本文简要的讨论了Java语言编程中更新XML文档的四种常用方法,并且分析这四种方法的优劣。其次,本文还对如何控制Java程序输出的XML文档的格式做了展开论述。  JAXP是Java API for XML Processing的英文字头缩写,中文含义是:用于XML文档处理的使用Java语言编写的编程接口。JAXP支持DOM、SAX、XSLT等标准。为了增强JAXP使用上的灵活性,开发者特

机器喵的休闲生活 635

【腹腔镜数据集】Cholec80+CholecSeg8k2020+Endoscapes2024

计算机辅助手术的发展旨在提高手术的正确性和安全性。然而,研究人员和工程师却面临着开发和训练更好算法所需的注释数据有限的问题。因此,同步定位与建图(SLAM)等基础算法的发展受到限制。基于Cholec80数据集,从Cholec80中的17个视频片段中提取了8,080个腹腔镜胆囊切除术图像帧,对图像进行注释并向公众发布。该数据集名为 CholecSeg8K。这些图像中的每一个都以十三个类别的像素级注释,这些类别通常在腹腔镜胆囊切除术中发现。

Toky_min的博客 2018

实战演练 | ABAQUS显式动力学分析在金属切削仿真中的应用

本文详细介绍了如何利用ABAQUS显式动力学分析进行金属切削过程的二维仿真。通过从零开始的完整流程,包括几何建模、材料本构与失效定义、网格划分、接触设置、边界条件施加,到结果后处理与切削力提取,为工程师和研究人员提供了实用的仿真方法,以优化刀具设计和加工工艺。

purple的博客 930

java 修改xml文件节点值并保存_xml解析——增删改查操作后将其修改结果保存

一、可扩展标记语言xml:Extensible Markup Language1、XML的作用:1)统一数据传输的格式。2)做小型数据库[文件型数据库]。3)做配置文件 .ini .propertity .xml.cfg2、XML文件的基本格式:标签:分为双标签和单标签,双标签的开头和结尾标签名必须一致,大小写一样,/ 开头的是结尾标签,单标签必须在 > 前加上 /来结尾,单标签中不...

weixin_42423817的博客 2760

交换机救命命令手册:华为 & 思科平台最全运维指令速查表

很多时候,真正拉你一把的不是“高深理论”,而是你手里有没有一份靠得住的命令速查表。这篇文章,希望能成为你“进可调试,退可排障”的一份救命卡片。

HuaweiLab_Peach的博客 1515

java 操作xml 修改xml文件_java操作XML文件

XML文件可以用来作为一种小型数据库存在,但更多时候在项目中都是用来当成配置文件用的,也就避免不了对XML文件的增上改查操作。在java中,解析XML文件的方式大致分为两种:DOM解析,SAX解析先来说DOM解析方式:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。...

weixin_39753674的博客 1027

PyTorch 面试题及详细答案120题(54-70)-- 模型训练与评估

本文介绍了PyTorch模型训练的基本流程和核心概念。主要内容包括: 模型训练基本流程:通过代码示例展示了数据准备、模型定义、损失函数和优化器选择、训练循环(前向传播、反向传播、参数更新)的完整过程,并包含验证集评估的实现。 训练过程中的关键概念: Epoch:完整遍历一次训练集 Batch:将数据分成小批次 Iteration:一个Batch的参数更新过程 三者关系:1 Epoch = N/B Batch = N/B Iteration(N为样本数,B为batch_size) PyTorch数据加载机制:

大剑师兰特的GIS世界 488

FPGA 学习笔记:Vitis IDE launch failed 的解决方法

FPGA 学习笔记:Vitis IDE launch failed 的解决方法

坚韧与专注 1万+

xml文件的java操作有那些

XML文件可以当做一个数据库存在,但多数在项目中都是用来当成配置文件用的,也就避免不了对XML文件的增删改查操作。 在java中,解析XML文件的方式大致分为两种:DOM解析,SAX解析...

qq_42293134的博客 181

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

解析XML文件并且进行增删改查操作

phoneinfo.xml文件: 解析XML文件,并且增删改查操作: package com.hfxt; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IO

jay92520的博客 429

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

老版QQ原生表情gif动态

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

关于jdom解析XML文件的方法将获得信息转存到PO对象里面

通过java反射机制获取节点,将节点里面的内容存到PO对象中,然后进行数据的增删改查import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.

LiSped的专栏 790

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

用dom4j解析xml文件并执行增删改查操作

转自:https://www.aliyun.com/jiaocheng/1339446.html 1 xml文件: 2 <?xml version="1.0" encoding="GBK"?> 3 4 <phoneinfo> 5 <brand name="小米" id="1"> 6 <type na...

weixin_33816611的博客 87

XML学习之Dom方式解析XML文件

XML学习之Dom方式解析Xml文件 一、java解析XML概述   1.Xml解析方式分为两种:Dom方式和SAX方式。    (1)、DOM方式:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。    (2)、SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,   但是几乎所有的XML解

yanyu110991的专栏 3505

java解析xml

使用javase来解析xml必经之路! dom解析 sax解析

待看浮沉的博客 439

5、java操作xml,dom4j

、 1、首先在项目路径下引入dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar包,jaxp方式解析xml文件 <?xml version="1.0" encoding="UTF-8"?> <students> <student name="cn.itcast_0001"> <name>dogdog...

aihaotan8299的博客 103

Java 解析 XML

转载自:http://blog.youkuaiyun.com/zjf280441589/article/details/50613881 Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式  根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象  优点: 便于实现增 删

This My Life - chisj 638
上一篇: Importlib模块与__import__详解
下一篇: 多线程中的生产者消费者模型
ErikChan.hk
博客等级 码龄12年 107粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值