java 读写xml_JAVA对XML文件的读写

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

xml指令

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

以下为例:

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

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

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

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

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

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

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

张三

5000

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,具有性能优异、功能强

大和极端易用使用的特点,同时它也是一个开放源代码的软件。

packageday12;importjava.io.File;importjava.util.ArrayList;importjava.util.List;importorg.dom4j.Attribute;importorg.dom4j.Document;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;/*** 使用DOM解析xml文档

*@authorylg

**/

public classParseXmlDemo {public static voidmain(String[] args) {try{/** 解析XML大致流程

* 1:创建SAXReader

* 2:使用SAXReader读取数据源(xml文档信息)

* 并生成一个Document对象,该对象即表示

* xml文档内容。DOM耗时耗内存资源也是在

* 这一步体现的。因为会对整个XML文档进行

* 读取并载入内存。

* 3:通过Document对象获取根元素

* 4:根据XML文档结构从根元素开始逐层获取

* 子元素最终以达到遍历XML文档内容的目的

**/

//1

SAXReader reader= newSAXReader();//2

Document doc= reader.read(new File("emplist.xml"));/** 3

* Document提供了方法:

* Element getRootElement()

* 该方法是用来获取XML文档中的根元素,

* 对于emplist.xml文档而言,根元素就是

* 标签。

*

* 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 list =root.elements();//用于保存所有员工信息的List集合

List empList = new ArrayList();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= newEmp(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将其写入一个文件。

importjava.io.FileOutputStream;importjava.util.ArrayList;importjava.util.List;importorg.dom4j.Document;importorg.dom4j.DocumentHelper;importorg.dom4j.Element;importorg.dom4j.io.OutputFormat;importorg.dom4j.io.XMLWriter;/*** 使用DOM生成XML文档

*@authorylg

**/

public classWriteXmlDemo {public static voidmain(String[] args) {

List list = new ArrayList();

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= newXMLWriter(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(节点名称):表示选择该节点的所有子节点

"/":表示选择根节点

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值