XML文件如下:
PhoneType.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PhoneInfo><Brand name="苹果"><Type name="iPhone 6s"/><Type name="iPhone 8"/><Type name="iPhone X"/><Type name="iPhone 11 Pro"/></Brand><Brand name="三星"><Type name="Note 10"/></Brand>
</PhoneInfo>

newInfo.xml

<?xml version="1.0" encoding="UTF-8"?><PhoneInfo> <Brand name="苹果" id="1"> <Type name="iPhone 6s"/>  <Type name="iPhone 8"/>  <Type name="iPhone X"/>  <Type name="iPhone 11 Pro"/> </Brand>  <Brand name="华为" id="3"><Type name="Mate 10 Pro"/></Brand>
</PhoneInfo>

DOM解析XML文件

package com.biubiubiu.demo01XML.DOM;
/*** 使用DOM解析XML文件* @author 11142**/import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;public class ParseXMLDemoDOM {//PhoneType.xml对应的Document对象private Document document;//获得DOM树(Document对象)public void getDom() {//获得解析器工厂(创建解析器工厂对象)DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();try {//根据解析器工厂对象获得解析器(创建解析器对象)DocumentBuilder builder = factory.newDocumentBuilder();//解析器来解析XML文件获得Document对象document = builder.parse("PhoneType.xml");} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}//获取手机品牌及型号相关信息public void showInfo() {//以Document做起点,先拿到所有的Brand节点NodeList brands = document.getElementsByTagName("Brand");//遍历brands,从中拿出每一个Brandfor(int i=0; i<brands.getLength(); i++) {Node node = brands.item(i);Element eleBrand = (Element)node;String brandName = eleBrand.getAttribute("name");System.out.println(brandName);//继续查找,找每个Brand的子节点出来NodeList types = eleBrand.getChildNodes();for(int j=0; j<types.getLength(); j++) {Node typeNode = types.item(j);//判断是元素节点才要if(typeNode.getNodeType() == Node.ELEMENT_NODE) {Element typeEle = (Element)typeNode;System.out.println("\t" + typeEle.getAttribute("name"));}}}}//为XML文件添加元素public void addEle() {//(1)创建Brand,<Brand name="三星">Element brand = document.createElement("Brand");brand.setAttribute("name", "三星");//<Type name="Note 10">Element type = document.createElement("Type");type.setAttribute("name", "Note 10");//将Type作为Brand的子元素brand.appendChild(type);//将Brand放到PhoneInfo中去document.getElementsByTagName("PhoneInfo").item(0).appendChild(brand);saveXML("PhoneType.xml");}//添加后,保存xml文件(需要借助转换器:源(最新的DOM树) ---> 目的地(PhoneType.xml),借助输出流)public void saveXML(String path) {//转换器工厂TransformerFactory factory = TransformerFactory.newInstance();factory.setAttribute("indent-number", 4);try {//转换器Transformer transformer = factory.newTransformer();//指定转换格式transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");transformer.setOutputProperty(OutputKeys.INDENT, "YES");//源(最新的DOM树) ---> 目的地(PhoneType.xml)DOMSource source = new DOMSource(document);OutputStream out = new FileOutputStream(path);StreamResult result = new StreamResult(new OutputStreamWriter(out, "UTF-8"));transformer.transform(source, result);} catch (TransformerConfigurationException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (TransformerException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();}}//修改元素public void updateEle() {//获取所有的BrandNodeList brands = document.getElementsByTagName("Brand");for(int i=0; i<brands.getLength(); i++) {Node brand = brands.item(i);Element brandEle = (Element)brand;//添加ID序号brandEle.setAttribute("id", i+"");}saveXML("PhoneType.xml");}//删除元素public void deleteEle() {//获取所有的BrandNodeList brands = document.getElementsByTagName("Brand");for(int i=0; i<brands.getLength(); i++) {Node brand = brands.item(i);Element brandEle = (Element)brand;//删除华为if(brandEle.getAttribute("name").equals("华为")) {brandEle.getParentNode().removeChild(brand);}}saveXML("PhoneType.xml");}public static void main(String[] args) {ParseXMLDemoDOM pxd = new ParseXMLDemoDOM();pxd.getDom();
//      pxd.addEle();
//      pxd.updateEle();pxd.deleteEle();pxd.showInfo();}}

DOM4J解析XML文件
需要引入dom4j.jar,百度下载即可

package com.biubiubiu.demo01XML.DOM4J;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Iterator;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/*** 使用DOM4J解析XML文件* @author 11142**/
public class ParseXMLDemoDOM4J {private Document document;//获得document对象public void loadDocument() {SAXReader saxReader = new SAXReader();try {document = saxReader.read(new File("PhoneType.xml"));} catch (DocumentException e) {e.printStackTrace();}}//显示手机的品牌和型号public void showInfo() {//获取xml根节点Element root = document.getRootElement();//获取所有<Brand>Iterator eleBrands = root.elementIterator();while(eleBrands.hasNext()) {Element brand = (Element)eleBrands.next();System.out.println(brand.attributeValue("name"));Iterator eleTypes = brand.elementIterator();while(eleTypes.hasNext()) {Element type = (Element)eleTypes.next();System.out.println("\t" + type.attributeValue("name"));}}}//增加手机品牌信息public void addNewPhone() {//获得xml根元素Element root = document.getRootElement();//创建<Brand name="华为">Element eleBrand  = root.addElement("Brand");eleBrand.addAttribute("name", "华为");//创建<Type name="Mate 10 Pro">Element eleType = eleBrand.addElement("Type");eleType.addAttribute("name", "Mate 10 Pro");saveXml("newInfo.xml");}//修改节点增加ID属性public void updatePhone() {Element root = document.getRootElement();Iterator eleBrands = root.elementIterator();int id = 0;while (eleBrands.hasNext()) {Element brand = (Element)eleBrands.next();id++;brand.addAttribute("id", id+"");}saveXml("newInfo.xml");}//删除节点:三星public void deletePhone() {Element root = document.getRootElement();Iterator eleBrands = root.elementIterator();while (eleBrands.hasNext()) {Element brand = (Element)eleBrands.next();if(brand.attributeValue("name").equals("三星")) {brand.getParent().remove(brand);}}saveXml("newInfo.xml");}//保存修改后的xml文件public void saveXml(String path) {OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter writer = null;
//      format.setEncoding("GBK");//可以设置编码try {writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(path)),format);writer.write(document);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}try {} finally {try {writer.close();} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {ParseXMLDemoDOM4J pxDom4j = new ParseXMLDemoDOM4J();pxDom4j.loadDocument();pxDom4j.addNewPhone();pxDom4j.updatePhone();pxDom4j.deletePhone();pxDom4j.showInfo();}}

Java使用DOM和DOM4J分别解析XML文件步骤以及代码相关推荐

  1. 使用dom4j来解析xml文件或xml字符串

    现有一个配置文件,需要解析出根节点与子节点,还有子节点下属性的信息.虽然w3c.dom规范亦可以解析,但这儿我们尝试使用dom4j的方式来解析. 涉及到的jar包有dom4j-1.6.1.jar xm ...

  2. JAVA动态读取xml_Java动态生成和解析xml文件步骤详解

    packageday12;importjava.io.FileInputStream;importjava.util.ArrayList;importjava.util.List;importorg. ...

  3. java:AXIS调用webService接口,返回String类型xml,并用dom4j简单解析xml

    一.使用axis调用webService接口,返回String类型xml 1.导入axis依赖 2.直接贴代码 /*** 调用webservice接口的方法,并返回String类型的xml* @par ...

  4. Java解析XML文件的方式

    在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到"解析xml文件"的需求.一般来讲,有基于DOM树和SAX的两种 ...

  5. 一个如何解析XML文件? [关闭]

    已关闭 . 这个问题需要更加 集中 . 它当前不接受答案. 想改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题. 去年关闭. 这篇文章是 社区维基 . 编辑现有答案以改善此职位. 它当前 ...

  6. java jdom dom4j_Java基础系列17:使用DOM、SAX、JDOM、DOM4J解析XML文件详解

    一 简介 在Java中,可以使用多种方式来解析XML文件,其中最常见的可能就是DOM.SAX.JDOM.DOM4J这四种方式了.其中,DOM和SAX这两种解析XML文件的方式有jdk自带的API,因此 ...

  7. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  8. 使用jdk DOM,SAX和第三方jar包DOM4J创建,解析xml文件

    xml的创建,解析 1. 什么是xml文件 1.1 什么是xml文件 1.2 解析xml的方式,优缺点 2. 使用dom操作xml文件 2.1 使用dom创建xml文件 2.2 使用dom解析xml文 ...

  9. java解析xml文件的几种方式(DOM解析)

    好久不用的东西,今天居然被面试官问到了.那既然这样,我们就一起回顾下java解析xml文件的几种方式吧. DOM解析 dom解析所需依赖是我们jdk自带的,所以只需要使用jdk为我们提供的接口即可上手 ...

最新文章

  1. 盘点数据科学20个最好的Python库(附链接)
  2. Linux系统服务器如何禁ping
  3. Spring MVC 入门示例讲解
  4. 音视频流媒体的原理以及基础入门知识
  5. Python Django 装饰器模式之二阶装饰器
  6. WARNING: YARN_ROOT_LOGGER has been replaced by HADOOP_ROOT_LOGGER. Using value of YARN_ROOT_LOGGER
  7. Day39:threading模块、ThreadLocal
  8. jQuery获取URL参数
  9. mysql都有哪些数据库日志_MySQL数据库之MySQL都有哪些日志?分别都代表什么
  10. 改SB训练数据的名字
  11. Android省电妙招
  12. 6. 移动端Web开发调试之Chrome远程调试(Remote Debugging)
  13. awx文件解析,运用NCL处理风云卫星2E的AWX格式数据的总结
  14. 支付宝扫描二维码支付
  15. 如何批量调节图片对比度?
  16. HDU 2000 Java 奇怪的jio
  17. GCC中的编译选项“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数
  18. 认识并理顺元宇宙与产业互联网之间的关系,可以打开产业互联网的发展新症结
  19. 禁道具和连携击败姜世离的两种战术
  20. 2020最新各大网站软件提交入口,软件发布入口汇总

热门文章

  1. 【C语言程序设计】求自然底数e,求自然对数的底e!
  2. JavaScript 生成唯一ID的几种方式
  3. STM32启动及内存模型
  4. Steam热门游戏《帝国神话》分享:如何用UE4打造大型开放世界生存沙盒网游?
  5. android修改默认遥控器键值,android 中遥控器键值的添加和修改
  6. win10 启用BitLocker,保存恢复密钥时提示:BitLocker加密无法保存到Microsoft账户 的解决方法
  7. 在 Mac 上显示或隐藏文件扩展名
  8. Struts2 漏洞集合
  9. Linux 中文乱码解决
  10. WIN7系统 64位出现 Net Framework 数据提供程序要求 Microsoft Data Access Components(MDAC)....