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解析方式把整个文档看成是一个倒挂的树形结构来进行解析。有助于更好的理... 阅读详情

Sample1:

1:新建XML文档 books.xml,放到项目的根目录下。

  1. <?xml version="1.0" encoding="GB2312"?>    
  2. <books  count="3"    
  3.     xmlns="http://test.org/books">    
  4.     <!--books's comment-->    
  5.     <book id="1">    
  6.         <name>Thinking in JAVA</name>    
  7.     </book>    
  8.     <book id="2">    
  9.         <name>Core JAVA2</name>    
  10.     </book>    
  11.     <book id="3">    
  12.         <name>C++ primer</name>    
  13.     </book>    
  14. </books>  

2:java解析代码如下:

  1. package com.dom.test;  
  2.   
  3. import java.io.File;     
  4. import java.io.IOException;     
  5.     
  6. import javax.xml.parsers.DocumentBuilder;     
  7. import javax.xml.parsers.DocumentBuilderFactory;     
  8. import javax.xml.parsers.ParserConfigurationException;     
  9.     
  10. import org.w3c.dom.Document;     
  11. import org.w3c.dom.Element;     
  12. import org.w3c.dom.NamedNodeMap;     
  13. import org.w3c.dom.Node;     
  14. import org.w3c.dom.NodeList;     
  15. import org.xml.sax.SAXException;     
  16.     
  17. public class Test {     
  18.     public static void main(String[] args) throws ParserConfigurationException,     
  19.             SAXException, IOException {     
  20.         DocumentBuilderFactory builderFactory = DocumentBuilderFactory     
  21.                 .newInstance();     
  22.         DocumentBuilder builder = builderFactory.newDocumentBuilder();     
  23.         /*    
  24.          * builder.parse()方法将给定文件的内容解析为一个 XML 文档, 并且返回一个新的 DOM Document对象。    
  25.          */    
  26.         Document document = builder.parse(new File("books.xml"));     
  27.         //打印document节点     
  28.         printNode(document,0);     
  29.              
  30.         //获取文档的根元素,赋值给rootElement变量     
  31.         Element rootElement = document.getDocumentElement();     
  32.         //获取根元素的count属性     
  33.         int countOfBooks = Integer.parseInt(rootElement.getAttribute("count"));     
  34.         String str = rootElement.getAttribute("xmlns");  
  35.         System.out.println(str);  
  36.         System.out.println("There are "+countOfBooks+" books , they are ");     
  37.           
  38.         //获取rootElement的所有子节点(不包括属性节点),返回一个NodeList对象     
  39.         NodeList childNodes = rootElement.getChildNodes();     
  40.         for(int i = 0;i < childNodes.getLength();i++){     
  41.             //获取childNodes的第i个节点     
  42.             Node childNode = childNodes.item(i);     
  43.             //判断childNode是不是一个元素节点,并且它的 nodeName 值为book     
  44.             if(childNode.getNodeType() == Node.ELEMENT_NODE      
  45.                     && childNode.getNodeName().equals("book")){     
  46.                 //若是,则获取childNode的所有子节点(不包括属性节点),返回一个NodeList对象     
  47.                 NodeList childNodes_2 = childNode.getChildNodes();     
  48.                 for(int j = 0;j < childNodes_2.getLength();j++){     
  49.                     //获取childNodes_2的第j个节点     
  50.                     Node childNode_2 = childNodes_2.item(j);     
  51.                     //判断childNode_2是不是一个元素节点,并且它的 nodeName 值为name     
  52.                     if(childNode_2.getNodeType() == Node.ELEMENT_NODE      
  53.                             && childNode_2.getNodeName().equals("name")){     
  54.                         //若是,则获取childNode_2的所有子节点(不包括属性节点),返回一个NodeList对象     
  55.                         NodeList childNodes_3 = childNode_2.getChildNodes();     
  56.                         for(int k = 0;k < childNodes_3.getLength();k++){     
  57.                             //获取childNodes_3的第k个节点     
  58.                             Node childNode_3 = childNodes_3.item(k);     
  59.                             //判断childNodes_3是不是一个文本节点     
  60.                             if(childNode_3.getNodeType() == Node.TEXT_NODE){     
  61.                                 //若是,则打印输出这个文本节点的nodeValue     
  62.                                 System.out.println("  <<"+childNode_3.getNodeValue()+">>");     
  63.                             }     
  64.                         }     
  65.                     }     
  66.                 }     
  67.             }     
  68.         }     
  69.     }     
  70.          
  71.     /*    
  72.      * 打印 DOM 节点    
  73.      * 输出格式为:    
  74.      *     nodeType(nodeName,nodeValue)    
  75.      *         "ATTRIBUTE"(attributeName=attributeValue)    
  76.      *         ...    
  77.      *         childNodeType[childNodeName,childNodeValue]    
  78.      *         ...    
  79.      */    
  80.     public static void printNode(Node node,int count) {     
  81.         if (node != null) {     
  82.             String tmp = "";     
  83.             for(int i = 0 ; i < count ; i++) tmp += "  ";     
  84.             //获取node节点的节点类型,赋值给nodeType变量     
  85.             int nodeType = node.getNodeType();     
  86.             switch (nodeType) {     
  87.                 case Node.ATTRIBUTE_NODE: tmp += "ATTRIBUTE";break;     
  88.                 case Node.CDATA_SECTION_NODE: tmp += "CDATA_SECTION";break;     
  89.                 case Node.COMMENT_NODE:tmp += "COMMENT";break;     
  90.                 case Node.DOCUMENT_FRAGMENT_NODE:tmp += "DOCUMENT_FRAGMENT";break;     
  91.                 case Node.DOCUMENT_NODE:tmp += "DOCUMENT";break;     
  92.                 case Node.DOCUMENT_TYPE_NODE:tmp += "DOCUMENT_TYPE";break;     
  93.                 case Node.ELEMENT_NODE:tmp += "ELEMENT";break;     
  94.                 case Node.ENTITY_NODE:tmp += "ENTITY";break;     
  95.                 case Node.ENTITY_REFERENCE_NODE:tmp += "ENTITY_REFERENCE";break;     
  96.                 case Node.NOTATION_NODE:tmp += "NOTATION";break;     
  97.                 case Node.PROCESSING_INSTRUCTION_NODE:tmp += "PROCESSING_INSTRUCTION";break;     
  98.                 case Node.TEXT_NODE:tmp += "TEXT";break;     
  99.                 default:return;//invalid node type.     
  100.             }     
  101.                  
  102.             System.out.println(tmp+" ("+node.getNodeName()+","+node.getNodeValue()+")");     
  103.             /*    
  104.              * node.getAttributes()方法返回    
  105.              * 包含node节点的属性的 NamedNodeMap(如果它是 Element)    
  106.              */    
  107.             NamedNodeMap attrs = node.getAttributes();     
  108.             if(attrs != null)     
  109.                 for(int i = 0 ; i < attrs.getLength() ; i++){     
  110.                     printNode(attrs.item(i),count+1);     
  111.                 }     
  112.             /*    
  113.              * node.getChildNodes()方法返回    
  114.              * 包含node节点的所有子节点的 NodeList。    
  115.              */    
  116.             NodeList childNodes = node.getChildNodes();     
  117.             for(int i = 0 ; i < childNodes.getLength() ; i++){     
  118.                 printNode(childNodes.item(i),count+1);     
  119.             }     
  120.         }     
  121.     }     
  122. }    
3:运行上面的Test.java即可测试。


Sample2:

1:新建XML文档 persons.xml,放到项目的根目录下。

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <persons>  
  3.     
  4.   <person><name>kalision</name><sex>男</sex></person>  
  5.     
  6.   <person>  
  7.     <name>kity</name>  
  8.     <sex>女</sex>  
  9.   </person>  
  10.     
  11.   <person>  
  12.     <name>qizai</name>  
  13.     <sex>女</sex>  
  14.   </person>  
  15.     
  16. </persons>  

2:java解析代码如下:

  1. package net.vicp.jiasoft;  
  2.   
  3. import javax.xml.parsers.*;  
  4. import java.io.IOException;  
  5. import org.xml.sax.SAXException;  
  6. import org.w3c.dom.Document;  
  7. import org.w3c.dom.NodeList;  
  8. import org.w3c.dom.Node;  
  9.   
  10. public class DomXml {  
  11.      public void parsersXml() {  
  12.          //实例化一个文档构建器工厂  
  13.          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
  14.          try {  
  15.              //通过文档构建器工厂获取一个文档构建器  
  16.              DocumentBuilder db = dbf.newDocumentBuilder();  
  17.              //通过文档通过文档构建器构建一个文档实例  
  18.              Document doc = db.parse("persons.xml");  
  19.              //获取所有名字为 “person” 的节点  
  20.              NodeList nl1 = doc.getElementsByTagName("person");  
  21.              int size1 = nl1.getLength();  
  22.              System.out.println("该名称的节点长度为:" + size1);  
  23.              for (int i = 0; i < size1; i++) {  
  24.                  Node n = nl1.item(i);  
  25.                  //获取 n 节点下所有的子节点。此处值得注意,在DOM解析时会将所有回车都视为 n 节点的子节点。  
  26.                  NodeList nl2 = n.getChildNodes();  
  27.                  //因为上面的原因,在此例中第一个 n 节点有 2 个子节点,而第二个 n 节点则有 5 个子节点(因为多了3个回车)。  
  28.                  int size2 = nl2.getLength();  
  29.                  System.out.println("N节点的第一个子节点的长度为:" + size2);  
  30.                  for (int j = 0; j < size2; j++) {  
  31.                      Node n2 = nl2.item(j);  
  32.                      //还是因为上面的原因,故此要处判断当 n2 节点有子节点的时才输出。  
  33.                      if (n2.hasChildNodes()) {  
  34.                          System.out.println(n2.getNodeName() + " = " +  
  35.                                             n2.getFirstChild().getNodeValue());  
  36.                      }  
  37.                  }  
  38.              }  
  39.          } catch (ParserConfigurationException ex) {  
  40.              ex.printStackTrace();  
  41.          } catch (IOException ex) {  
  42.              ex.printStackTrace();  
  43.          } catch (SAXException ex) {  
  44.              ex.printStackTrace();  
  45.          }  
  46.      }  
  47.    
  48.      public static void main(String[] args) {  
  49.          DomXml domxml = new DomXml();  
  50.          domxml.parsersXml();  
  51.      }  
  52.  } 

3:运行上面的DomXml.java即可测试。




【Proteus】NE555纯硬件实现LED呼吸灯效果,附源文件,效果展示 本设计通过NE555与三极管的巧妙配合,仅用基础元件实现了呼吸灯效果。核心在于利用RC积分电路将PWM信号转换为控制电压,并通过负反馈动态调节占空比。Proteus仿真验证了方案的可行性,读者可进一步优化参数或扩展功能,探索更多硬件设计可能性。 阅读详情

相关推荐

Unity3d游戏开发工程师笔试题学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、学习背景二、错题记录2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 前言 提示:这里可以.

m0_54231818的博客 5464

Javaweb之javascript的DOM对象的详细解析

DOM:Document Object Model 文档对象模型。也就是 JavaScript 将 HTML 文档的各个组成部分封装为对象。DOM 其实我们并不陌生,之前在学习 XML 就接触过,只不过 XML 文档中的标签需要我们写代码解析,而 HTML 文档是浏览器解析。封装的对象分为Document:整个文档对象Element:元素对象Attribute:属性对象Text:文本对象Comment:注释对象如下图,左边是 HTML 文档内容,右边是 DOM 树。

qq_69748833的博客 464

envi5.3处理高分二号影像数据详细过程记录

全文根据此篇文章进行数据处理: tm影像辐射定标_高分二号影像数据预处理及裁剪过程 其他参考: 学习笔记---遥感影像辐射定标与大气校正 利用ENVI自带全球DEM数据计算区域平均高程 高分二号数据处理流程(有高分二号的数据信息) GF2有多光谱和全色两个数据,MSS是多光谱的,PAN是全色的,多光谱的分辨率低,全色的高,需要把这两个数据融合,融合之前需要做定标等处理,获取经纬度。 一、多光谱影像处理 1. 辐射定标 以这个为例: 其他路径\2022.4.2...

ligous的博客 5万+

Java之xml解析(Dom方式)

一个XML文件加载进内存的时候,在内存中形成所谓的一种树状结构【优点】形成了树结构,直观易于理解,代码更易编写。解析过程中树结构保存在内存中,方便修改【缺点】当XML文件较大的时候,最内存耗费比较大,容易影响解析性能并且可能会造成内存溢出。

qq_44166712的博客 789

php对接建行h5网页支付

php对接建行h5网页支付前言H5页面支付H5页面支付回调通知退款及其他的业务 前言 最近接到公司乙方要求,需要再支付上面增加建行的支付渠道。之前一直用的都是微信和支付宝这种第三方支付平台,银行直接对接比较少。没办法就只能上网搜索,搜索一番返现网上对接建行的资料比较少,没办法只好摸着石头过河,中间也借鉴了一些大佬的文章内容。 H5页面支付 根据建行的h5网页支付对接文档,还是可以看出是比较简单的。...

lihua100862的博客 5408

CST-Python(Pycharm如何与CST联合仿真,获取S参数)

我们想使用Python与CST联合仿真,其实是不需要自己下载Python的,因为CST在下载的时候就自带了Python3.6,我们只需要找到并将软件的环境设置到相应位置,即可联合仿真。(我的保存路径为D:\Program Files (x86)\CST Studio Suite 2020,在寻找时可以将前面切换成自己的保存路径,后面不需要修改)在CST帮助文档(打开CST软件,按F11即可直接访问帮助文档)里面,进行如下操作,便可以看到CST适配的Python版本为Python3.6!

weixin_52696285的博客 5648

Java代码操作xml文件--dom解析

Java dom解析xml文件 进行增删改查

qq_45437885的博客 3421

张量分解浅谈(四 Tucker 分解)

学完了SVD算法之后,我们继续回到张量几大分解的学习上来,本期学习的主要内容是张量的 Tucker 分解 以及 前面的CP分解还留下一点没有说完,正好一并补齐!后面的公式我将采用颜色标记,红色代表必须掌握,蓝色尽量掌握! 在这之前先附一张图,包含了各种运算符号的名称含义,大部分是前面说过或者使用过的: Tensor decomposition一 . Tucker 分解公式介绍和原理二 . 张量的 n-Rank 一 . Tucker 分解公式介绍和原理 我们先来看一张被使用过很多次的Trucker 分解图

欢迎来到 豪哥 的博客 1万+

【Java高级特性】解析XML技术——DOM解析XML

一文学会使用DOM解析xml文件

baaa111的博客 1490

openbmc 支持mctp over pcie(二)

本文介绍了在OpenBMC系统中实现MCTP over PCIe的社区方案,主要针对AMD CPU和Intel CPU平台。方案基于社区开发的mctpd应用层和内核驱动,通过修改设备树(dts)配置内存区域,并编译Linux内核模块。验证时可通过查看/proc/net/protocols确认MCTP协议支持,使用ip addr命令检查mctppci0网络接口状态。相关代码和文档参考了AspeedTech和CodeConstruct的GitHub仓库。该方案为BMC作为MCTP端点提供了标准化实现方法。

wit_yuan的专栏 375

【系统架构设计师】论文:论虚拟现实技术的应用与发展

虚拟现实技术是当前科学研究的热点,同时也是国家大力支持发展的核心技术之一。所谓虚拟现实,就是通过计算机等虚拟手段来构造一个非常接近真实世界的虚拟环境,它主要体现在视觉、触觉、嗅觉等方面的逼真模拟来达到高度的沉浸性,也就是如我们通常所说的“身临其境”。

数据知道的博客 1万+

java中使用DOM解析xml文件

java中使用DOM解析xml文件

chao的博客 3035

完整功能-《网络安全创新实践》:设计并实现一种基于Npcap的网络嗅探器(直接能运行cpp的MFC代码+实验报告)

《网络安全创新实践》:设计并实现一种基于Npcap的网络嗅探器。(直接能跑的MFC)监听所有数据包,以及监听指定IP地址的数据包;(2)能够显示完整的IP数据包首部信息,例如:版本、首部长度、数据包长度、数据包类型(协议字段)、TTL、源IP地址、目的IP地址等;(3)能够显示完整的TCP报文段信息,例如:源端口、目的端口、序号、确认号、数据部分等;(4)能够自动检测SQL注入攻击等Web攻击行为;(5)能够将监听到的数据包信息保存到文件中,以及从文件中读取并显示数据包信息;(6)具有图形化操作界面。

weixin_46531010的博客 660

java dom 解析xml 例子,Java DOM解析XML的幾個例子

Sample1:1:新建XML文檔 books.xml,放到項目的根目錄下。xmlns="http://test.org/books">Thinking in JAVACore JAVA2C++ primer2:java解析代碼如下:package com.dom.test;import java.io.File;import java.io.IOException;import javax...

weixin_35781147的博客 183

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

计算机控制技术及应用

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

Java DOM 解析 XML 的几个例子

Sample1: 1:新建XML文档 books.xml,放到项目的根目录下。

moncheri78的专栏 570

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JAVA使用DOM解析XML

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

續寫經典 3268

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

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

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

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

java学习心得 2889

【Java编程】DOM XML Parser解析、遍历、创建XML

1、前言 DOM XML Parser介绍 DOM 是 W3C 处理 XML 的标准 API,它是许多其它与 XML 处理相关的标准的基础,不仅是 Java,其它诸如 Javascript,PHP,MS .NET 等等语言都实现了该标准,成为了应用最为广泛的 XML 处理方式。当然,为了能提供更多更加强大的功能,Java 对于 DOM 直接扩展工具类有很多,比如很多 Java 程序员耳熟能详的

andieguo的专栏 1万+

Java DOM解析XML

XML在项目开发中经常使用。   XML中的常用术语:   元素(Element):指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。【Element是Node,但Node不一定是Element】   节点(Node):根据 DOM,XML 文档中的每个成分都是一个节点。其中整个文档是一个文档节点、每个 XML 标签是一个元

Hsing Hsu's Blog 1174

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

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

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

王璐 1612

dom解析xml

1. DOM简介目前,W3C已于2000年11月13日推出了规范DOM level 2。文档对象模型(DOM)是HTML和XML文档的编程接口规范,它与平台和语言是无关的,因而可以用各种语言在各种平台上实现。该模型定义了THML和XML文件在内存中的逻辑结构(即为文档),提供了访问、存取THML和XML文件的方法。利用DOM规范,可以实现DOM 文档和XML之间的相互转换,遍历、操作相应DOM文档

赵小刀的文字吧 2079

java 解析dom实例_dom解析xml例子

DOM 一些知识的介绍 首先得到:得到 DOM 解析器的工厂实例 DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance(); 然后从DOM工厂获得DOM解析器 DocumentBuilder dombuilder=domfac.newDocumentBuilder(); 把要解析的XML文档转化为输入流,...

程序员一代码搬运工 298
上一篇: MySQL出现Waiting for table metadata lock的原因以及解决方法
下一篇: SLF4J和log4j
本木生
博客等级 码龄14年 18粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值