1.DOM 实现方法

xml文件

<?xml version="1.0" encoding="utf-8"?>
<Accounts>
<Account type="type1">
<code>100001</code>
<pass>123</pass>
<name>张三</name>
<money>1000000.00</money>
</Account>
<Account type="type2">
<code>100002</code>
<pass>123</pass>
<name>李四</name>
<money>1000.00</money>
</Account>
</Accounts>

java文件

package dom;

import java.io.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; public class Dom { public static void main(String arge[]) { Element element = null;
// 可以使用绝对路劲
File f = new File("dom/book.xml"); // documentBuilder为抽象不能直接实例化(将XML文件转换为DOM文件)
DocumentBuilder db = null;
DocumentBuilderFactory dbf = null;
try {
// 返回documentBuilderFactory返回工厂对象
dbf = DocumentBuilderFactory.newInstance();
// 返回db对象用documentBuilderFatory对象获得返回documentBuildr对象
db = dbf.newDocumentBuilder(); // 得到一个DOM并返回给document对象
Document dt = db.parse(f);
// 得到一个elment根元素
element = dt.getDocumentElement();
// 输出根元素的name
System.out.println("根元素:" + element.getNodeName());//Accounts // 获得根元素下的子节点
NodeList childNodes = element.getChildNodes(); // 遍历根节点下的所有子节点
for (int i = 0; i < childNodes.getLength(); i++) {//5 #text Account #text Account #text 会把回车算成子节点,实际只有两个子节点
// 获得每个对应位置i的结点
Node node1 = childNodes.item(i);
System.out.println("分别是="+node1.getNodeName());
if ("Account".equals(node1.getNodeName())) {
// 如果节点的名称为"Account",则输出Account元素属性type
//NamedNodeMap nnm = node1.getAttributes()的返回值是NamedNodeMap对象
//通过节点名称返回结点对象Node node = getNamedItem("type")
//getNodeValue()返回的是xml节点的值
System.out.println("\r\n找到一篇账号. 所属区域: "
+ node1.getAttributes().getNamedItem("type")
.getNodeValue() + ". ");
// 获得<Accounts>下的节点
NodeList nodeDetail = node1.getChildNodes();
// 遍历<Accounts>下的节点
for (int j = 0; j < nodeDetail.getLength(); j++) {//9 #text code #text pass #text name #text money #text
// 获得<Accounts>元素每一个节点
Node detail = nodeDetail.item(j);
if ("code".equals(detail.getNodeName())) // 输出code
System.out
.println("卡号: " + detail.getTextContent());
else if ("pass".equals(detail.getNodeName())) // 输出pass
System.out
.println("密码: " + detail.getTextContent());
else if ("name".equals(detail.getNodeName())) // 输出name
System.out
.println("姓名: " + detail.getTextContent());
else if ("money".equals(detail.getNodeName())) // 输出money
System.out
.println("余额: " + detail.getTextContent());
}
} }
} catch (Exception e) {
e.printStackTrace();
}
} }

2.DOM4J 实现方法

XML文件

<?xml version="1.0" encoding="UTF-8"?>
<RESULT>
<VALUE >
<NO>A1234</NO>
<ADDR>河南省郑州市</ADDR>
</VALUE>
<VALUE>
<NO>B1234</NO>
<ADDR>河南省郑州市二七区</ADDR>
</VALUE>
</RESULT>

java文件

package dom4J;

import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*; public class Test { public static void main(String arge[]) { try {
File f = new File("dom4J/a.xml");
SAXReader reader = new SAXReader();
//得到Document对象
Document doc = reader.read(f);
//获得根节点
Element root = doc.getRootElement();
Element foo;
//elementIterator从根节点遍历子节点
Iterator i = root.elementIterator("VALUE");
while(i.hasNext()){
//for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {
foo = (Element) i.next();
//得到节点的内容
System.out.print("车牌号码:" + foo.elementText("NO"));
System.out.println("车主地址:" + foo.elementText("ADDR"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

3.JDOM实现方法

XML和上面相同,java代码如下

package jdom;

import java.io.File;
import java.util.List; import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder; public class Test {
public static void main(String arge[]) { try {
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File("jdom/a.xml"));
Element foo = doc.getRootElement();
List allChildren = foo.getChildren();
for (int i = 0; i < allChildren.size(); i++) {
System.out.print("车牌号码:"
+ ((Element) allChildren.get(i)).getChild("NO")
.getText());
System.out.println("车主地址:"
+ ((Element) allChildren.get(i)).getChild("ADDR")
.getText());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

注意:2,3方法需要引入相对应的jar包使用

java解析XML的方法的更多相关文章

  1. java解析xml字符串方法

    一,用DOM4J  针对无重复标签的xml字符串格式,如下: 针对此种情况可用DOM4J解析法,引入 dom4j的相关jar包代码如下: Document document=DocumentHelpe ...

  2. 最简单的JAVA解析XML字符串方法

    引入 dom4j 包<dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifa ...

  3. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

  4. 【Java】详解Java解析XML的四种方法

    XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法. AD: XML现在已经成为一种通用的数据交换格式,它的平台无关性,语 ...

  5. Java解析XML的四种方法详解 - 转载

    XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法 在做一般的XML数据交换过程中,我更乐意传递XML字符串,而不是格式化 ...

  6. Java 解析 XML

    Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...

  7. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

  8. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    [目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...

  9. Java解析XML文档(简单实例)——dom解析xml

      一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...

随机推荐

  1. 【原创】面向对象作业:选课系统中用pickle储存多个对象间组合引用关系的那些坑

    转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9030121.html 想直接看结论先提前列出: 1.存储一个对象,文件不是真的给你存储的了对象这种东西, ...

  2. ubuntu系统快速搭建开发环境

    1.免密登陆 1.1 原理 ssh协议中用到了对称加密和非对称加密,如果不了解可以百度一下,原理引用一下这篇博客 在ssh中,非对称加密被用来在会话初始化阶段为通信双方进行会话密钥的协商.由于非对称加 ...

  3. ubuntu多版本php切换

    最近想要学习一下swoole,虽然机子上装的是php7.0,但是考虑到一些有关swoole的轮子要依赖更高版本(例如swooletw),所以就在机子上升级了php7.2,下面是在网上搜索或者自己折腾出 ...

  4. 深度解析JQuery Dom元素操作技巧

    深度解析JQuery Dom元素操作技巧 DOM是一种与浏览器.平台.语言无关的接口,使用该接口可以轻松访问页面中所有的标准组件,这篇文章给大家介绍了JQuery dom元素操作方法,写的十分的全面细 ...

  5. RubyMine常用快捷键

    一级必会 Shift+F10:运行running Ctrl+Alt+R:弹出RakeCtrl+Alt+G:弹出GenerateCtrl+Alt+L:格式化代码Alt+F1:切换视图(Project, ...

  6. Leecode刷题之旅-C语言/python-111二叉树的最小深度

    /* * @lc app=leetcode.cn id=111 lang=c * * [111] 二叉树的最小深度 * * https://leetcode-cn.com/problems/minim ...

  7. ctf题目writeup(3)

    题目地址: https://www.ichunqiu.com/battalion 1. 这个是个mp3,给的校验是为了下载下来的. 下来之后丢进audicity中 放大后根据那个音块的宽度来确定是 . ...

  8. VC中编译出现error LNK2005:xx already defined in xxx.obj问题解决。

    网上百度说是在.h头文件中定义了全局变量,然后其他文件包括了该头文件的原因. 解决方法如下: 点击项目配置->linker->General->Force file Output设置 ...

  9. MySQL分区的限制(最多有多少个分区)

    MySQL分区的限制 •   只能对数据表的整型列进行分区,或者数据列可以通过分区函数转化成整型列 •   最大分区数目不能超过1024 •   如果含有唯一索引或者主键,则分区列必须包含在所有的唯一 ...

  10. Android开发——Android系统启动以及APK安装、启动过程

    0. 前言   从Android手机打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的? 1.  系统上电 当给Android系统上电,在电源接通的瞬间,CPU内的寄存器和各引脚均会被 ...