解析xml文件

1.1 XML解析的两种方式
1.1.1 DOM方式和SAX方式
DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。
SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。
XML解析开发包JAXP:是SUN公司推出的解析标准实现。
Dom4J:是开源组织推出的解析开发包。(牛,大家都在用,包括SUN公司的一些技术的实现都在用。)Dom for java fourLog4j 
1.1.2 总结:

DOM: 将整棵树一口气全部加载到内存当中, 我们可以非常方便的操作任意的标签和属性.

但是, 如果整棵树特别大的时候, 会出现内存溢出的问题

节点: 标签、属性、文本、甚至是换行都称之为节点

SAX: 一个节点一个节点的进行解析(暂不掌握)

1.2 Dom4J的方法概述

* Dom4J的常用方法:

                Document

                         Element getRootElement() :获取根元素对象(根标签)

                Element

                         List elements() :获取所有的子元素

                         List elements(String name):根据指定的元素名称来获取相应的所有的子元素

                         Element element(String name):根据指定的元素名称来获取子元素对象,如果元素名称重复,则获取第一个元素

                         String        elementText(String name) :根据指定的子元素名称,来获取子元素中的文本

                         String        getText() :获取当前元素对象的文本

                         void setText(String text):设置当前元素对象的文本

                         String        attributeValue(String name):根据指定的属性名称获取其对应的值

                         public Element addAttribute(String name,String value):根据指定的属性名称和值进行添加或者修改BeanUtils的常用方法

1.3 Dom4J的案例 (获取).1.3.1 功能分析

//1、得到某个具体的节点内容:打印"郑州"

//2、遍历所有元素节点:打印他们的元素名称。

                Ps: 因为不知道有多少个元素节点, 所以需要递归.

1.3.2 案例代码

private static void method2() throws Exception {
 
//2、遍历所有元素节点:打印他们的元素名称。
 
//获取根元素
 
Document document = Dom4JUtils.getDocument();
 
Element rootElement = document.getRootElement();
 
treeWalk(rootElement);
 
}
 
 
 
public static void treeWalk(Element element) {
 
//输出元素的名称
 
System.out.println(element.getName());
 
 
//获取指定元素的所有子元素
 
List<Element> es = element.elements();
 
for (Element e : es) {
 
treeWalk(e);
 
}
 
}
 
  
 
private static void method() throws Exception {
 
//1、得到某个具体的节点内容:打印"郑州"
 
Document document = Dom4JUtils.getDocument();
 
//获取根元素
 
Element rootElement = document.getRootElement();
 
//获取根元素下的所有子元素
 
List<Element> elements = rootElement.elements();
 
//根据索引获取第一个City元素
 
Element cityElement = elements.get(0);
 
//根据子元素的名称来获取子元素的文本
 
String text = cityElement.elementText("Name");
 
System.out.println(text);
 
}
 
  
 
<?xml version="1.0" encoding="UTF-8"?>
 
  
 
<State Code="37" Name="河南"
 
description="郑州" GDP="99999亿">
 
  <City>
 
    <Name>郑州</Name> 
 
    <Region>高薪区</Region>
 
  </City> 
 
  <City>三门峡</City> 
 
  <City>洛阳</City> 
 
  <City>安阳</City> 
 
  <City>南阳</City>
 
</State>

1.4 Dom4J的案例(删除和修改)1.4.1 功能分析

//3、修改某个元素节点的主体内容:信阳-->安阳

//6、删除指定元素节点:删除元素开封

        注意: 调用方法完毕, 仅仅是在内存中进行了修改, 需要用到OutputFormat和XMLWirter两个类配合使用

将数据写入到文件

1.4.2 实例代码

public static void write2XML(Document document) throws IOException {
 
OutputFormat format = OutputFormat.createPrettyPrint();
 
//format.setEncoding("UTF-8");//默认的编码就是UTF-8
 
XMLWriter writer = new XMLWriter( new FileOutputStream("src/com/itheima_04/city.xml"), format );
 
        writer.write( document );
 
}
 
  
 
  
 
private static void method3() throws Exception, IOException {
 
//3、修改某个元素节点的主体内容:信阳-->安阳
 
Document document = Dom4JUtils.getDocument();
 
//获取根元素
 
Element rootElement = document.getRootElement();
 
//获取根元素下的所有子元素
 
List<Element> es = rootElement.elements();
 
//根据索引可以获取指定的元素
 
Element cityElement = es.get(3);
 
//修改文本
 
cityElement.setText("安阳");
 
//写回文件
 
Dom4JUtils.write2XML(document);
 
}
 
  
 
private static void method4() throws Exception, IOException {
 
//6、删除指定元素节点:删除元素开封
 
Document document = Dom4JUtils.getDocument();
 
//获取根元素
 
Element rootElement = document.getRootElement();
 
//获取根元素下的所有子元素
 
List<Element> es = rootElement.elements();
 
Element cityElement = es.get(1);
 
//无法自杀,找他爹
 
Element parentElement = cityElement.getParent();
 
parentElement.remove(cityElement);
 
//写回文件
 
Dom4JUtils.write2XML(document);
 
}

1.5 Dom4J的案例(添加)

1.5.1 功能分析

                //4、向指定元素节点中增加子元素节:添加一个新城市<City>南阳</City>

                //5、向指定元素节点上增加同级元素节点:在洛阳前面,添加一个<City>三门峡</City>

1.5.2 案例代码

private static void method5() throws Exception, IOException {
 
//4、向指定元素节点中增加子元素节:添加一个新城市<City>南阳</City>
 
Document document = Dom4JUtils.getDocument();
 
//获取根元素
 
Element rootElement = document.getRootElement();
 
//添加元素
 
Element cityElement = rootElement.addElement("City");
 
//设置文本
 
cityElement.setText("南阳");
 
//写回文件
 
Dom4JUtils.write2XML(document);
 
}
 
  
 
private static void method6() throws Exception, IOException {
 
//5、向指定元素节点上增加同级元素节点:在洛阳前面,添加一个<City>三门峡</City>
 
//创建一个新的元素对象
 
Element cityElement = DocumentHelper.createElement("City");
 
//设置文本
 
cityElement.setText("三门峡");
 
 
Document document = Dom4JUtils.getDocument();
 
//获取根元素
 
Element rootElement = document.getRootElement();
 
//获取根元素下所有的子元素
 
List<Element> es = rootElement.elements();
 
//将新的元素添加到子元素列表中
 
es.add(1, cityElement);
 
 
//写会文件
 
Dom4JUtils.write2XML(document);
 
}

1.6 Dom4J的案例(属性获取和添加)

1.6.1 功能分析

                //7、操作XML文件属性:打印State的Name

                //8、添加属性:State: GDP="99999亿"

1.6.2 案例代码

private static void method7() throws Exception {
 
//7、操作XML文件属性:打印State的Name
 
Document document = Dom4JUtils.getDocument();
 
//获取根元素
 
Element rootElement = document.getRootElement();
 
//根据属性名称获取值
 
String value = rootElement.attributeValue("Name");
 
System.out.println(value);
 
}
 
  
 
public static void main(String[] args) throws Exception  {
 
//7、操作XML文件属性:打印State的Name
 
//8、添加属性:State: GDP="99999亿"
 
Document document = Dom4JUtils.getDocument();
 
//获取根元素
 
Element rootElement = document.getRootElement();
 
//添加新的属性和对应的值
 
rootElement.addAttribute("GDP", "99999亿");
 
 
//写回文件
 
Dom4JUtils.write2XML(document);
 
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值