java xmlattribute_java基础之XML

java基础之XML

XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。本篇文章重点介绍DOM4J对XML文件的一些操作。

1. XML解析概述

常见解析方式和解析器

DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。

优点:元素与元素之间保留结构关系,故可以进行增删改查操作。

缺点:XML文档过大,可能出现内存溢出显现。

SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件。

优点:处理速度快,可以处理大文件

缺点:只能读,逐行后将释放资源。

2. DOM4J介绍

2.1 常用包

包名

作用

import org.dom4j.Document;

Document文档类

import org.dom4j.Element

元素节点类

import org.dom4j.QName;

一个对元素名字的封装类

import org.dom4j.io.SAXReader;

sax读取类

import org.dom4j.io.XMLWriter

xml写入类

import org.dom4j.io.OutputFormat

输出格式

2.2 内置元素

元素

含义

Attribute

定义了 XML 的属性。

Branch

指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为

CDATA

定义了 XML CDATA 区域

CharacterData

是一个标识接口,标识基于字符的节点。如CDATA,Comment, Text.

Comment

定义了 XML 注释的行为

Document

定义了XML 文档

DocumentType

定义 XML DOCTYPE 声明

Element

定义XML 元素

ElementHandler

定义了Element 对象的处理器

ElementPath

被 ElementHandler 使用,用于取得当前正在处理的路径层次信息

Entity

定义 XML entity

Node

为dom4j中所有的XML节点定义了多态行为

NodeFilter

定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate)

ProcessingInstruction

定义 XML 处理指令

Text

定义 XML 文本节点

Visitor

用于实现 Visitor模式

XPath

在分析一个字符串后会提供一个 XPath 表达式

2.2 Element类

方法

含义

getQName()

元素的QName对象

getNamespace()

元素所属的Namespace对象

getNamespacePrefix()

元素所属的Namespace对象的prefix

getNamespaceURI()

元素所属的Namespace对象的URI

getName()

元素的local name

getQualifiedName()

元素的qualified name

getText()

元素所含有的text内容,如果内容为空则返回一个空字符串而不是null

getTextTrim()

元素所含有的text内容,其中连续的空格被转化为单个空格,该方法不会返回null

attributeIterator()

元素属性的iterator,其中每个元素都是

2.3 Attribute类

方法

含义

attributeValue()

元素的某个指定属性所含的值

elementIterator()

元素的子元素的iterator,其中每个元素都是Element对象

element()

元素的某个指定(qualified name或者local name)的子元素

elementText()

元素的某个指定(qualified name或者local name)的子元素中的text信息

getParent()

元素的父元素

getPath()

元素的XPath表达式,其中父元素的qualified name和子元素的qualified name之间使用”/”分隔

isTextOnly()

是否该元素只含有text或是空元素

isRootElement()

是否该元素是XML树的根节点

2.4 常用操作

读取xml文件,获得document对象.

SAXReader reader = new SAXReader();

Document document = reader.read(new File("***.xml"));

解析XML形式的文本,得到document对象.

String text = "";

Document document = DocumentHelper.parseText(text);

获取根节点

Element root = dom.getRootElement();

取得某节点的单个子节点

Element memberElm=root.element("title");

获取节点文字

String text=memberElm.getText();

取得某节点下名为"title"所有字节点并进行遍历

List list = rootElm.elements("member");

Iterator it = list.iterator();

while(it.hasNext()){

Element elm = it.next();

// do something...

}

在某节点下添加子节点.

Element ageElm = newMemberElm.addElement("age");

设置节点文字.

ageElm.setText("29");

删除某节点.

parentElm.remove(childElm);

取得某节点下的某属性

Element root=document.getRootElement();

Attribute attribute=root.attribute("id");

设置某节点的属性和文字.

newMemberElm.addAttribute("name", "sitinspring");

设置属性的文字

Attribute attribute=root.attribute("name");

attribute.setText("sitinspring");

删除某属性

Attribute attribute=root.attribute("size");// 属性名name

root.remove(attribute);

3. 代码演示

3.1 DOM4J读取xml文件

test.xml

巴黎圣母院

雨果

米切尔

1. 使用List列表解析xml

import java.io.File;

import java.util.List;

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

public class XmlDemo {

public static void main(String[] args) throws Exception {

SAXReader reader = new SAXReader();

File file = new File("test.xml");

Document document = reader.read(file);

Element root = document.getRootElement();

List childElements = root.elements();

for (Element child : childElements) {

//已知属性名情况下

System.out.println("--->id: " + child.attributeValue("id"));

System.out.println("title:" + child.elementText("title"));

System.out.println("author:" + child.elementText("author"));

//未知属性名情况下

/*List attributeList = child.attributes();

for (Attribute attr : attributeList) {

System.out.println(attr.getName() + ": " + attr.getValue());

}

List elementList = child.elements();

for (Element ele : elementList) {

System.out.println(ele.getName() + ": " + ele.getText());

}

System.out.println();*/

}

}

}

//输出结果:

--->id: 1

title:巴黎圣母院

author:雨果

--->id: 2

title:飘

author:米切尔

2. 使用Iterator解析xml

public class XmlDemo {

public static void main(String[] args) throws Exception {

SAXReader reader = new SAXReader();

Document document = reader.read(new File("test.xml"));

Element root = document.getRootElement();

Iterator it = root.elementIterator();

while (it.hasNext()) {

Element element = it.next();

//未知属性名称情况下

Iterator attrIt = element.attributeIterator();

while (attrIt.hasNext()) {

Attribute a = (Attribute) attrIt.next();

System.out.println(a.getValue());

}

Iterator eleIt = element.elementIterator();

while (eleIt.hasNext()) {

Element e = eleIt.next();

System.out.println(e.getName() + ": " + e.getText());

}

System.out.println();

//已知元素名情况下

/*System.out.println("id: " + element.attributeValue("id"));

System.out.println("title: " + element.elementText("title"));

System.out.println("author: " + element.elementText("author"));

System.out.println();*/

}

}

}

//输出结果:

id: 1

title:巴黎圣母院

author:雨果

id: 2

title:飘

author:米切尔

3.2 DOM4J创建xml文件

public class XmlDemo {

public static void main(String[] args) throws Exception {

Document doc = DocumentHelper.createDocument();

//增加根节点

Element books = doc.addElement("bookstore");

//增加子元素

Element book1 = books.addElement("book");

Element title1 = book1.addElement("title");

Element author1 = book1.addElement("author");

Element book2 = books.addElement("book");

Element title2 = book2.addElement("title");

Element author2 = book2.addElement("author");

//为子节点添加属性

book1.addAttribute("id", "3");

//为元素添加内容

title1.setText("战争与和平");

author1.setText("列夫托尔斯泰");

book2.addAttribute("id", "4");

title2.setText("红楼梦");

author2.setText("曹雪芹");

//实例化输出格式对象

OutputFormat format = OutputFormat.createPrettyPrint();

//设置输出编码

format.setEncoding("UTF-8");

//创建需要写入的File对象

File file = new File("test2.xml");

//生成XMLWriter对象,构造函数中的参数为需要输出的文件流和格式

XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);

//开始写入,write方法中包含上面创建的Document对象

writer.write(doc);

}

}

运行结果(项目根目录下):

战争与和平

列夫托尔斯泰

红楼梦

曹雪芹

3.2 DOM4J修改xml文件

public class XmlDeml {

public static void main(String[] args) throws Exception {

SAXReader reader = new SAXReader();

File file = new File("test.xml");

Document document = reader.read(file);

Element root = document.getRootElement();

Element nameElement = root.element("book").element("author");

nameElement.setText("鲁迅");

//写回XML文档

OutputFormat format = OutputFormat.createPrettyPrint();

XMLWriter writer = new XMLWriter(new FileOutputStream("test.xml"), format);

writer.write(document);

writer.close();

}

}

运行结果(项目根目录下):

巴黎圣母院

鲁迅

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值