A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我是楠楠 黑马粉丝团   /  2019-3-26 11:05  /  1175 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 我是楠楠 于 2019-3-26 11:06 编辑

【郑州校区】解析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 案例代码
[AppleScript] 纯文本查看 复制代码
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 实例代码
[AppleScript] 纯文本查看 复制代码
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 案例代码
[AppleScript] 纯文本查看 复制代码
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 案例代码
[AppleScript] 纯文本查看 复制代码
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);

}
传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马