使用Java自带DOM工具解析XML

XML的DOM解析(Java实现) 目录 一、DOM定义 二、DOM代码实现 1、注意:我们应当认识到,DOM一切皆节点。 2、XML文件代码 3、DOM解析XML的过程 三、通用方法用于把所有的xml文件进行解析 四、实现XML增加、修改和删除操作 1、增加功能代码 ​ 2、修改功能代码 ​3、删除功能代码 一、DOM定义 DOM:Document Object Model,文档对象模型,DOM解析方式把整个文档看成是一个倒挂的树形结构来进行解析。有助于更好的理... 阅读详情

包括三个文件:studentInfo.xml(待解析的xml文件),DomBuilder.java(解析的主要类),TestDomBuilder.java(测试解析的结果),代码分别如下(由于使用csdn blog自带的代码粘贴工具会朝里加入一些"..."字符,虽然利于查看,但是不利于把代码copy出来运行,而亲自运行代码对程序员来说是很重要的,故没有使用csdn blog自带的代码粘贴工具来插入代码,而是用着用直白的方式):

 studentInfo.xml

 <?xml version="1.0" encoding="gb2312"?>
<student>
    <person age="25"><!--如果没有age属性,默认的为20-->
        <name>崔卫兵</name>
        <college>PC学院</college>
        <telephone>62354666</telephone>
        <notes>男,1982年生,硕士,现就读于北京邮电大学</notes>
    </person>
    <person>
        <name>cwb</name>
        <college leader="leader1">PC学院</college><!--如果没有leader属性,默认的为leader-->
        <telephone>62358888</telephone>
        <notes>男,1987年生,硕士,现就读于中国农业大学</notes>
    </person>
    <person age="45">
        <name>xxxxx</name>
        <college leader="">xxx学院</college>
        <telephone>66666666</telephone>
        <notes>注视中,注释中</notes>
    </person>
    <person age="">
        <name>yyyyyy</name>
        <college leader="学院领导">yyyy学院</college>
        <telephone>88888888</telephone>
        <notes>注视中111,注释中222</notes>
    </person>
</student>

 DomBuilder.java

 package domExample;

import java.util.HashMap;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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;

/**
 * 用java自带的DOM工具实现对xml的编程
 *
 * @author cuiweibing
 * @since 2007.8.9
 */
public class DomBuilder {
 /**
  * 执行具体的解析工作
  * @param filename,待解析的既定格式的xml文件名(相对路径或者决定路径)
  * @param hm      ,HashMap 存放解析后的结果,供后继使用
  */
 /**
  * @param filename
  * @param hm
  */
 public void executeParser(String filename,HashMap<String,String> hm){
  DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();

  try {
   //产生解析实例
   DocumentBuilder dombuilder = domfac.newDocumentBuilder();
   //把XML文件读入放在FileInputStream中,并用其父类InputStream的实例接受
   InputStream is = new FileInputStream(filename);
   //根据输入XML文件流解析成Document结构,供下面遍历与操作使用
   Document doc = dombuilder.parse(is);
   //获取根结点student
   Element root = doc.getDocumentElement();
   NodeList persons = root.getChildNodes();
   //用于记录学生编号的变量
   int num=-1;
   if (persons != null) {
    //遍历所有person节点
    for (int i = 0; i < persons.getLength(); i++) {
     Node person = persons.item(i);
     if (person.getNodeType() == Node.ELEMENT_NODE) {
      num++;
      // 获取person节点的age属性的值
      Node personNode=person.getAttributes().getNamedItem("age");
      if(personNode!=null){
       String age = personNode.getNodeValue();
       if (age != null&&!age.equals("")) {
        hm.put(person.getNodeName() + "-age" + num, age);
       } else {
        hm.put(person.getNodeName() + "-age" + num, "20");
       }
      }else {
       hm.put(person.getNodeName() + "-age" + num, "20");
      }
      //遍历所有person节点的子节点
      for (Node node = person.getFirstChild(); node != null; node = node
        .getNextSibling()) {
       if (node.getNodeType() == Node.ELEMENT_NODE) {
        // 处理person节点的子节点name
        if (node.getNodeName().equals("name")) {
         String name = node.getNodeName();
         //不可用此,dom中也认为<name>崔卫兵</name>中的"崔卫兵"也是节点,而且是name节点的子节点,不同于SAX
         //String name = node.getNodeValue();
         String nameValue = node.getFirstChild().getNodeValue();
         hm.put(name + num, nameValue);
        }
        // 处理person节点的子节点college
        else if (node.getNodeName().equals("college")) {
         String name = node.getNodeName();
         String nameValue = node.getFirstChild().getNodeValue();
         hm.put(name + num, nameValue);
         //获取college节点的leader属性的值
         Node leaderNode=node.getAttributes().getNamedItem("leader");
         if(leaderNode!=null){
          String leader = leaderNode.getNodeValue();
          if (leader != null&&!leader.equals("")) {
           hm.put(node.getNodeName() + "-leader" + num, leader);
          } else {
           hm.put(node.getNodeName() + "-leader" + num, "leader");
          }
         }else {
          hm.put(node.getNodeName() + "-leader" + num, "leader");
         }
        }
        //处理person节点的子节点telephone
        else if (node.getNodeName().equals("telephone")) {
         String name = node.getNodeName();
         String nameValue = node.getFirstChild().getNodeValue();
         hm.put(name + num, nameValue);
        }
        //处理person节点的子节点notes
        else if (node.getNodeName().equals("notes")) {
         String name = node.getNodeName();
         String nameValue = node.getFirstChild().getNodeValue();
         hm.put(name + num, nameValue);
        }
       }
      }
     }
    }
   }
  } catch (ParserConfigurationException e) {
   e.printStackTrace();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (SAXException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 /**
  * 构造函数
  */
 public DomBuilder() {
 }
}

 TestDomBuilder.java

 package domExample;

import java.util.HashMap;

/**
 * 测试DomBuilder解析的情况
 * @author cuiweibing
 * @since 2007.8.9
 */
public class TestDomBuilder {
 public static void main(String[] args) {
     try{
       //获取解析完后的解析信息
       HashMap<String,String> hashMap = new HashMap<String,String>();
       DomBuilder db=new DomBuilder();
       db.executeParser("studentInfo.xml", hashMap);
       System.out.println("姓名/t年龄/t学院/t学院领导/t电话/t/t备注");
       for(int i=0;i<hashMap.size();i+=6){
         int j=i/6;
         System.out.print(hashMap.get("name"+j)+"/t");
         System.out.print(hashMap.get("person-age"+j)+"/t");
         System.out.print(hashMap.get("college"+j)+"/t");
         System.out.print(hashMap.get("college-leader"+j)+"/t");
         System.out.print(hashMap.get("telephone"+j)+"/t");
         System.out.println(hashMap.get("notes"+j)+"/t");
       }
     }catch(Exception ex){
       ex.printStackTrace();
     }
   }
}

  运行结果

姓名 年龄 学院 学院领导 电话  备注
崔卫兵 25 PC学院 leader 62354666 男,1982年生,硕士,现就读于北京邮电大学 
cwb 20 PC学院 leader1 62358888 男,1987年生,硕士,现就读于中国农业大学 
xxxxx 45 xxx学院 leader 66666666 注视中,注释中 
yyyyyy 20 yyyy学院 学院领导 88888888 注视中111,注释中222 

DOMBuilder, 具有多种输出格式的DOM生成器.zip DOMBuilder, 具有多种输出格式的DOM生成器 DOMBuilder 在JavaScript中动态创建HTML内容,并支持从相同的输入生成多种类型的输出,这 DOMBuilder 。是的,有一百万个构建库。 DOMBuilder的目标是:让编写可以在前端和后端之间共享的 立即下载

相关推荐

java dom操作的jar

里面包含dom.jar和jdom.jar

Dom build

DOM的建立 在没有学习函数的封装之前,对于DOM的操作很麻烦;以前我们要经常调用元素还有各种方法,当我把一个对象封装起来的话,有些就变得简单了。就像一个计算器,加法是基础的方法,当你想使用乘法的时候,比如5x5;其实就是5个5相加,本来需要调用5次+的方法,而我们想把加法和加的次数封装起来,把这个封装的函数命名的符号为x;这样我们是否减...

weixin_33671935的博客 199

Dom解析技术

介绍了四种用于解析xml文档的DOM,SAX等四种技术的技术,浅显易懂,生动的讲述了如何解析xml文档。

java xml解析工具类_使用Java自带DOM工具解析XML

包括三个文件:studentInfo.xml(待解析的xml文件),DomBuilder.java(解析的主要类),TestDomBuilder.java(测试解析的结果),代码分别如下(由于使用csdn blog自带的代码粘贴工具会朝里加入一些"..."字符,虽然利于查看,但是不利于把代码copy出来运行,而亲自运行代码对程序员来说是很重要的,故没有使用csdn blog自带的代码粘贴工具来插入...

weixin_42510182的博客 521

域用户无法修改密码问题的解决方案

问题描述:加域的电脑无法更改密码,提示“无法更新密码,为新密码提供的值不符合字符域的长度、复杂度或历史要求”。 问题原因:域控制器中相关设置问题,主要如下图所示(如启用复杂性、最短期限和强制密码历史) 解决方案:在域控制器中更改对应的密码策略即可: ① 禁用复杂性要求 ② 最短使用期限改为0天 ③ 强制密码历史改为0 如果出现无法更改的情况,如下图箭头所指的图标所示 代表需要在域控制器的组策...

运维日记 3万+

告别龟速!实测Copernicus Dataspace下载Sentinel-2数据的3个提速技巧(附Workspace批量操作)

本文分享了在Copernicus Dataspace平台高效下载Sentinel-2遥感数据的3个实用技巧,包括网络传输层优化、浏览器与API调优以及Workspace批量操作。通过这些方法,用户可将下载速度提升300%以上,特别适合科研人员和团队处理大规模数据需求。

weixin_30706691的博客 178

DocumentBuilderFactory解析XML

(1) javax.xml.parsers 包中的DocumentBuilderFactory用于创建DOM模式的解析器对象 , DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法 ,这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回。 (2) 调用 DocumentBuilderFactory.newIn

懒惰的小肥肥的博客 3034

北斗三号PPP-B2b信号实战指南:从接收机配置到精度验证全流程

本文提供了北斗三号PPP-B2b信号从硬件配置到数据处理的全流程实战指南。详细解析了信号特性、接收机关键参数设置,并以飞纳接收机和Mass软件为例,演示了数据解算与精度验证方法。通过覆盖中国多地区的联调测试案例,验证了PPP-B2b服务可实现分米级实时定位精度,为无网络地区高精度应用提供了可靠解决方案。

nn3456的博客 551

Java调用XML的方法:DocumentBuilderFactory

首先得到:得到 DOM 解析器的工厂实例      DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance(); 然后从 DOM 工厂获得 DOM 解析器  DocumentBuilder dombuilder=domfac.newDocumentBuilder();   3 )把要解析的 XML 文

何成俭的博客 6018

大连海事大学课设题目/基于LM331的频率电压转换器

部分基于LM331的频压转换的实物连接问题

2301_76649592的博客 3226

基于价值的深度强化学习:DQN

本文主要是介绍DQN原理和算法伪代码和代码实现,算法实现包括pytorch版本和stable-baselines3版本

溯源的专栏 1083

java 自带解析xml_使用Java自带DOM工具解析XML

xml文件的格式为1111111104752015051818332075借款人编号借款人名名2110000012000001300000备注java的解析方法import java.io.FileInputStream;import java.io.InputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.pars...

weixin_42195978的博客 84

ENVI预处理GF-1号WFV1遥感数据提取NDVI指数

使用ENVI处理GF-1号遥感数据提取NDVI指数

所有专家都曾始于新手 8177

使用Java自带DOM工具解析XML .

包括三个文件:studentInfo.xml(待解析的xml文件),DomBuilder.java(解析的主要类),TestDomBuilder.java(测试解析的结果),代码分别如下(由于使用csdn blog自带的代码粘贴工具会朝里加入一些"..."字符,虽然利于查看,但是不利于把代码copy出来运行,而亲自运行代码对程序员来说是很重要的,故没有使用csdn blog自带的代码粘贴工具来插...

笨笨 311

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java解析xml中返回的数据???

(1)DOM解析 DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取 和操作文档的任意部分,是W3C的官方标准 【优点】①允许应用程序对数据和结构做出更改。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。以下是用dom4j来解析xml文件生成另一个xml文档的过程,我在这里只是将新生成的xml的文档打印,dom4j也可以新生成的xml的文档保存到磁盘。

aoxiangchina的博客 333

jre9下载 jdk9

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

java流式xml解析工具

原创的xml流式解析器

bithesenior的博客 639

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

JAVA使用DOM解析XML

JAVA使用DOM解析XML: 首先来了解点Java DOM 的 API: 1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 2.解析器:DocumentBuilder 创建方法:通过解析器工厂类来获得 DocumentBui

續寫經典 3268

XML的介绍及使用DOM,DOM4J解析xml文件

XML(可扩展标记语言,)是一种用于定义文档结构和数据存储的标记语言。它主要用于在不同的系统之间传输和存储数据。

欢迎来到一个不知名牛马的博客 1276

Java解析XML文档——dom解析xml

好久都没来写东西了。今天突然发现csdn的后台管理改版了,感觉样式还不错,本以为各方面都应该好了,那知道还是老样子。哎不说了,写东西。这段时间开始学j2ee的基础了。感觉很多东西都是模模糊糊能听懂,但下来没怎么看书,做起来还是很困难。今天晚上就整理了一下下面这些东西。一、前言    用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XM

java学习心得 2889

【XML解析】使用Jaxp对XML进行DOM解析

【前言】    璐小编在之前学习BS的时候接触过XML(请戳:【XML】基础知识初步认识),后来在项目中我们也会遇到XML的配置文件,现在学习Java又遇到对XML的文档内容进行解析。看来对于XML的认知是不断加深的过程~    本篇简介XML解析的方式以及使用Jaxp对XML文档进行dom解析。 【XML解析】     对于XML解析方式,有DOM文档对象模型和SAX两种。前者是

王璐 1615

Java使用DOM简单解析XML文件

Java解析XML文件流程的简单理解,工具类

qq_44717657的博客 1091

Java自带的XML解析

JAXP (Java API for XML Processing,意为处理XML的Java API) 解析XML一般有两种方式: 一种是DOM方式:一次性读取XML内容存入内存 优点:能进行各种增删改查的操作 确定:占用内存大 使用:给定需要读取的文件即可读取,读取出来之后再根据自己写的方法进行操作 还有一种是SAX方式:顺序读取内容,碰到什么样的标签执行什么样的操作由自己定义

OverrideRe的博客 3391

Java之XML解析-使用dom(org.w3c.dom)解析XML

Java之XML解析-使用dom(org.w3c.dom)解析XML

qq_25073223的博客 2575

演示JAVA自带DOM解析XML功能

1 XmlJavaImpl.java package cuigh.xml.java; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c

aben06的专栏 957
上一篇: 使用Java自带SAX工具解析XML
下一篇: 使用dom4j和XPath解析XML之例子一
cuiweibing
博客等级 码龄22年 23粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值