XML 指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具,应用于 web 开发的许多方面,常用于简化数据的存储和共享。

xml指令

处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。

以下为例:

在XML中,所有的处理指令都以结束。<?后面紧跟的是处理指令的名称。

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

XML 元素可以在开始标签中包含属性,属性 (Attribute) 提供关于元素的额外(附加)信息。属性通常提供不属于数据组成部分的信息,但是对

需要处理这个元素的应用程序来说却很重要。

XML 属性必须加引号,属性值必须被引号包围,不过单引号和双引号均可使用。

如果属性值本身包含双引号,那么有必要使用单引号包围它,或者可以使用实体引用。

进入主题了

首先要有一个xml文件为名字为emplist.xml内容如下

<?xml version="1.0" encoding="UTF-8"?>
<list>
<emp id="">
<name>张三</name>
<age></age>
<gender>男</gender>
<salary>5000</salary>
</emp> </list>

XML解析方式

SAX解析方式

SAX(simple API for XML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析。 其优缺点分别为:
**优点:** 解析可以立即开始,速度快,没有内存压力
**缺点:** 不能对节点做修改

DOM解析方式

DOM:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。DOM解析器在解析XML文档时,会把文档中
的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。其优缺点分别为:
**优点:**把xml文件在内存中构造树形结构,可以遍历和修改节点
**缺点:** 如果文件比较大,内存有压力,解析的时间会比较长

SAXReader读取XML文档

使用SAXReader需要导入**dom4j-full.jar**包。其是DOM4J的一个核心API,用于读取XML文档。
DOM4J是一个Java的XML API,类似于JDOM,用来读写XML文件的。DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强
大和极端易用使用的特点,同时它也是一个开放源代码的软件。

package day12;

import java.io.File;
import java.util.ArrayList;
import java.util.List; import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; /**
* 使用DOM解析xml文档
* @author ylg
*
*/
public class ParseXmlDemo {
public static void main(String[] args) {
try {
/*
* 解析XML大致流程
* 1:创建SAXReader
* 2:使用SAXReader读取数据源(xml文档信息)
* 并生成一个Document对象,该对象即表示
* xml文档内容。DOM耗时耗内存资源也是在
* 这一步体现的。因为会对整个XML文档进行
* 读取并载入内存。
* 3:通过Document对象获取根元素
* 4:根据XML文档结构从根元素开始逐层获取
* 子元素最终以达到遍历XML文档内容的目的
*
*/
//1
SAXReader reader = new SAXReader(); //2
Document doc
= reader.read(new File("emplist.xml")); /*
* 3
* Document提供了方法:
* Element getRootElement()
* 该方法是用来获取XML文档中的根元素,
* 对于emplist.xml文档而言,根元素就是
* <list>标签。
*
* Element类
* 每一个Element实例都可以表示XML文档中的
* 一个元素,即:一对标签。
*/
Element root = doc.getRootElement();
/*
* Element提供了方法:
* String getName()
* 该方法可以获取当前元素的名字(标签名)
*/
System.out.println(
"获取了根元素:"+root.getName()
);
//4
/*
* 获取一个元素中的子元素
* Element提供了相关方法:
*
* 1
* Element element(String name)
* 获取当前元素下指定名字的子元素。
*
* 2:
* List elements()
* 获取当前元素下所有子元素
*
* 3:
* List elements(String name)
* 获取当前元素下所有同名子元素
*
* 2,3返回的集合中的每一个元素都是Element
* 的实例,每个实例表示其中的一个子元素。
*
*/
//获取所有emp标签
List<Element> list = root.elements(); //用于保存所有员工信息的List集合
List<Emp> empList = new ArrayList<Emp>(); for(Element empEle : list){
// System.out.println(empEle.getName());
//获取员工名字
Element nameEle = empEle.element("name");
/*
* Element还提供了获取当前元素中文本的方法:
* String getText(),String getTextTrim()
*/
String name = nameEle.getText();
System.out.println("name:"+name); //获取员工年龄
int age = Integer.parseInt(
empEle.elementText("age")
); //获取性别
String gender = empEle.elementText("gender"); //获取工资
int salary = Integer.parseInt(
empEle.elementText("salary")
);
/*
* Attribute attribute(String name)
* 获取当前元素(标签)中指定名字的属性
*
* Attribute的每一个实例用于表示一个
* 属性。其中常用方法:
* String getName():获取属性名
* String getValue():获取属性值
*/
Attribute attr
= empEle.attribute("id");
int id = Integer.parseInt(
attr.getValue()
); Emp emp = new Emp(id,name,age,gender,salary);
empList.add(emp);
}
System.out.println("解析完毕!");
for(Emp emp : empList){
System.out.println(emp);
} } catch (Exception e) {
e.printStackTrace();
}
}
}

写XML

构建Document对象

使用DOM4J我们还可以通过自行构建Document对象,并组建树状结构来描述一个XML文档,并使用DOM4J将其写入一个文件。

import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List; import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter; /**
* 使用DOM生成XML文档
* @author ylg
*
*/
public class WriteXmlDemo {
public static void main(String[] args) {
List<Emp> list = new ArrayList<Emp>();
list.add(new Emp(1,"张三",25,"男",5000));
list.add(new Emp(2,"李四",26,"女",6000));
list.add(new Emp(3,"王五",27,"男",7000));
list.add(new Emp(4,"赵六",28,"女",8000));
list.add(new Emp(5,"钱七",29,"男",9000));
/*
* 使用DOM生成XML文档的大致步骤:
* 1:创建一个Document对象表示一个空文档
* 2:向Document中添加根元素
* 3:按照文档应有的结构从根元素开始顺序添加
* 子元素来形成该文档结构。
* 4:创建XmlWriter对象
* 5:将Document对象写出
* 若写入到文件中则形成一个xml文件
* 也可以写出到网络中作为传输数据使用
*/ //1
Document doc
= DocumentHelper.createDocument(); /*
* 2
* Document提供了添加根元素的方法:
* Element addElement(String name)
* 向当前文档中添加指定名字的根元素,返回
* 的Element就表示这个根元素。
* 需要注意,该方法只能调用一次,因为一个
* 文档只能有一个根元素。
*/
Element root = doc.addElement("list"); //3
for(Emp emp : list){
/*
* Element也提供了追加子元素的方法:
* Element addElement(String name)
* 调用次数没有限制,元素可以包含若干
* 子元素。
*/
Element empEle = root.addElement("emp"); //添加name信息
Element nameEle = empEle.addElement("name");
nameEle.addText(emp.getName()); //添加age信息
Element ageEle = empEle.addElement("age");
ageEle.addText(emp.getAge()+""); //添加gender信息
Element genderEle = empEle.addElement("gender");
genderEle.addText(emp.getGender()); //添加salary信息
Element salEle = empEle.addElement("salary");
salEle.addText(emp.getSalary()+""); /*
* 向当前元素中添加指定名字以及对应值的属性
*/
empEle.addAttribute("id", emp.getId()+""); }
try{
//4
XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
FileOutputStream fos
= new FileOutputStream("myemp.xml");
writer.setOutputStream(fos); //5
writer.write(doc);
System.out.println("写出完毕!");
writer.close();
}catch(Exception e){
e.printStackTrace();
}
}
}

注意事项:

XPath 路径表达式

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。由于我们单纯使用dom定位节点时,大部

分时间需要一层一层的处理,如果有了xPath,我们定位我们的节点将变得很轻松。他可以根据路径,属性,甚至是条件进行节点的检索。

      XPath 使用路径表达式在XML 文档中进行导航

      XPath 包含一个标准函数库

      XPath 是 XSLT 中的主要元素

      XPath 是一个 W3C 标准

路径表达式语法:

      斜杠(/)作为路径内部的分割符。

      同一个节点有绝对路径和相对路径两种写法:

      路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...。

      相对路径(relative path)则是除了绝对路径以外的其他写法,比如 step/step, 也就是不使用"/"起首。

      "."表示当前节点。

      ".."表示当前节点的父节点

      nodename(节点名称):表示选择该节点的所有子节点

      "/":表示选择根节点

      "//":表示选择任意位置的某个节点

      "@": 表示选择某个属性

JAVA对XML文件的读写(有具体的代码和解析的更多相关文章

  1. JAVA对XML文件的读写

    XML 指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具,应用于 web 开发的许多方面,常用于简化数据的存储和共享. xml指令处理指令,简 ...

  2. eclipse编辑窗口不见了(打开左边的java、xml文件,中间不会显示代码)

    转自:https://blog.csdn.net/u012062810/article/details/46729779?utm_source=blogxgwz4 1. windows-->re ...

  3. eclipse 编辑窗口不见了(打开左边的java、xml文件,中间不会显示代码)

    参考:https://blog.csdn.net/u012062810/article/details/46729779

  4. # java对xml文件的基本操作

    下面是简单的总结三种常用的java对xml文件的操作 1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这 ...

  5. 用java操作XML文件(DOM解析方式)

    XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...

  6. java对xml文件做增删改查------摘录

    java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...

  7. 更新java对xml文件的操作

    //更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...

  8. Java操作xml文件

    Bbsxml.java public class Bbsxml { private String imgsrc; private String title; private String url; p ...

  9. java 读取XML文件作为配置文件

    首先,贴上自己的实例: XML文件:NewFile.xml(该文件与src目录同级) <?xml version="1.0" encoding="UTF-8&quo ...

随机推荐

  1. ubuntu输入某个目录测试该目录里.C文件里代码行数shell脚本

    #!/bin/bash echo "★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★☆ ★☆ ★☆★" echo "★☆       统计代码行数        ☆★&qu ...

  2. POJ 2251 三维BFS(基础题)

    Dungeon Master Description You are trapped in a 3D dungeon and need to find the quickest way out! Th ...

  3. LoadRunner接口工作总结

    因为工作中需要开发维护类似枢纽性质的平台,所以经常利用LR进行接口测试.接口自动化测试.接口压力测试.用多了LR,有点不愿意使用报文编辑器进行手工接口测试了.  接口脚本操作过程: 首先:打开LR,N ...

  4. .NET Core 事件总线,分布式事务解决方案:CAP

    背景 相信前面几篇关于微服务的文章也介绍了那么多了,在构建微服务的过程中确实需要这么一个东西,即便不是在构建微服务,那么在构建分布式应用的过程中也会遇到分布式事务的问题,那么 CAP 就是在这样的背景 ...

  5. ES6——块级作用域

    前面的话 过去,javascript缺乏块级作用域,var声明时的声明提升.属性变量等行为让人困惑.ES6的新语法可以帮助我们更好地控制作用域.本文将详细介绍ES6新引入的块级作用域绑定机制.let和 ...

  6. Spring事件解析

    首先介绍Spring事件相关类的关系: 其中EventListener与EventObject均是Java SE的范畴,源码如下: package java.util; public interfac ...

  7. DL4NLP——词表示模型(二)基于神经网络的模型:NPLM;word2vec(CBOW/Skip-gram)

    本文简述了以下内容: 神经概率语言模型NPLM,训练语言模型并同时得到词表示 word2vec:CBOW / Skip-gram,直接以得到词表示为目标的模型 (一)原始CBOW(Continuous ...

  8. org.w3c.dom.Element 缺少 setTextContent 步骤

    org.w3c.dom.Element 缺少 setTextContent 方法 今天将项目环境由jdk5改为jdk6,eclipse重新编译工程后,却突然出现org.w3c.dom.Element没 ...

  9. 用Python识别网站使用的技术

    在进行爬虫之前,一般我们都会对要爬取的网站进行识别,识别我们要爬取的网站所使用到的技术,这样才能更有利于我们爬虫工作的进行.所以在此介绍以下如何用Python去识别一个网站所使用到的技术. 环境:Py ...

  10. Java基础之数据类型、内存、修饰符、代码块

    Java 数据类型 基本数据类型 数值:int.short.long 字符:char 布尔:boolean 引用数据类型 class(类) interface(接口) 数组[] 所占字节数(1 byt ...