苦尽甘来 一个月学通JavaWeb(五 XML)

夜光序言:

世界上没有快乐或痛苦;只有一种状况与另一种状况的比较,只是如此而已~~

 

 

 

正文:微微一笑~~累么,累就对了,但是呢,活着本来就这样

 

DOM4J

DOM4J概述

1 DOM4J是什么

DOM4J是针对Java开发人员专门提供的XML文档解析规范,它不同与DOM,但与DOM相似。DOM4J针对Java开发人员而设计,所以对于Java开发人员来说,使用DOM4J要比使用DOM更加方便。

DOM4J对DOM和SAX提供了支持,使用DOM4J可以把org.dom4j.document转换成org.w3c.Document,DOM4J也支持基于SAX的事件驱动处理模式。

使用者需要注意,DOM4J解析的结果是org.dom4j.Document,而不是org.w3c.Document。DOM4J与DOM一样,只是一组规范(接口与抽象类组成),底层必须要有DOM4J解析器的实现来支持。

DOM4J使用JAXP来查找SAX解析器,然后把XML文档解析为org.dom4j.Document对象。它还支持使用org.w3c.Document来转换为org.dom4j.Docment对象。

 

2 DOM4J中的类结构【夜光:有点帅~~】

在DOM4J中,也有Node、Document、Element等接口,结构上与DOM中的接口比较相似。但还是有很多的区别:

在DOM4J中,所有XML组成部分都是一个Node,其中Branch表示可以包含子节点的节点,例如Document和Element都是可以有子节点的,它们都是Branch的子接口。

Attribute是属性节点,CharacterData是文本节点,文本节点有三个子接口,分别是CDATA、Text、Comment。

 

3 DOM4J获取Document对象

  使用DOM4J来加载XML文档,需要先获取SAXReader对象,然后通过SAXReader对象的read()方法来加载XML文档:

 

SAXReader reader = new SAXReader();

// reader.setValidation(true); 夜光

Document doc = reader.read("src/students.xml");

 

4 DOM4J保存Document对象

保存Document对象需要使用XMLWriter对象的write()方法来完成,在创建XMLWriter时还可以为其指定XML文档的格式(缩进字符串以及是否换行),这需要使用OutputFormat来指定。

 

doc.addDocType("students", "", "students.dtd");

OutputFormat format = new OutputFormat("\t", true);

format.setEncoding("UTF-8");

XMLWriter writer = new XMLWriter(new FileWriter(xmlName), format);

writer.write(doc);

writer.close();

 

5 DOM4J创建Document对象

DocumentHelper类有很多的createXXX()方法,用来创建各种Node对象。

 

Document doc = DocumentHelper.createDocument();

 

 

Document操作 (*****)

 

1 遍历students.xml

  涉及的相关方法:

  1. Element getRootElement():Document的方法,用来获取根元素;
  2. List elements():Element的方法,用来获取所有子元素;
  3. String attributeValue(String name):Element的方法,用来获取指定名字的属性值;
  4. Element element(String name):Element的方法,用来获取第一个指定名字的子元素;
  5. Element elementText(String name):Element的方法,用来获取第一个指定名字的子元素的文本内容。

 

洒脱一笑~~

生命里总有那么个人,惊艳了时光,让你念念不忘;哭红了眼眶,却还笑着原谅。

 

分析步骤:

  1. 获取Document对象;
  2. 获取root元素;
  3. 获取root所有子元素
  4. 遍历每个student元素;
  • 打印student元素number属性;
  • 打印student元素的name子元素内容;
  • 打印student元素的age子元素内容;
  • 打印student元素的sex子元素内容。

 

2 给学生元素添加<score>子元素

涉及的相关方法:

  1. Element addElement(String name):Element的方法,为当前元素添加指定名字子元素。返回值为新建元素对象;
  2. setText(String text):Element的方法,为当前元素设置文本内容。

 

分析步骤:

  1. 获取Document对象;
  2. 获取root对象;
  3. 获取root所有子元素;
  4. 遍历所有学生子元素;
  • 创建<score>元素,为<score>添加文本内容;
  • 把<score>元素添加到学生元素中。
  1. 保存Document对象。

 

3 为A添加friend属性,指定为B学号

涉及方法:

  1. addAttribute(String name, String value):Element的方法,为当前元素添加属性。

 

分析步骤:

  1. 获取Document对象;
  2. 获取root对象;
  3. 获取root所有子元素;
  4. 创建两个Element引用:AEle、BEle,赋值为null;
  5. 遍历所有学生子元素;
  • 如果AEle和BEle都不是null,break;
  • 判断当前学生元素的name子元素文本内容是A,那么把当前学生元素赋给AEle;
  • 判断当前学生元素的name子元素文本内容是B,那么把当前学生元素赋给BEle。
  1. 判断AEle和BEle都不为null时:
  • 获取BEle的number属性。
  • 为AEle添加friend属性,属性值为B的number属性值。
  • 保存Document对象。

 

4 删除number为ID_1003的学生元素

涉及方法:

  1. boolean remove(Element e):Element和Document的方法,移除指定子元素;
  2. Element getParent():获取父元素,根元素的父元素为null。

 

分析步骤:

  1. 获取Document对象;
  2. 获取root对象;
  3. 获取root所有子元素;
  4. 遍历所有学生子元素;
  • 判断当前学生元素的number属性是否为ID_1003;
  • 获取当前元素的父元素;
  • 父元素中删除当前元素;
  1. 保存Document对象.

 

5 通过List<Student>生成Document并保存

涉及方法:

  1. DocumentHelper.createDocument():创建Document对象;
  2. DocumentHelper.createElement(String name):创建指定名称的Element元素。

 

 

分析步骤:

  1. 创建Document对象;
  2. 为Document添加根元素<students>;
  3. 循环遍历学生集合List<Student>;
  • 把当前学生对象转换成Element元素;
  • 把Element元素添加到根元素中;
  1. 保存Document对象。

 

把学生转换成Element步骤分析:

  1. 创建Element对象;
  2. 为Element添加number属性,值为学生的number;
  3. 为Element添加name子元素,文本内容为学生的name;
  4. 为Element添加age子元素,文本内容为学生的age;
  5. 为Element添加sex子元素,文本内容为学生的sex。

 

6 新建C学生元素,插入到B之前

涉及方法:

  1. int indexOf(Node node):Branch的方法,查找指定节点,在当前Branch的子节点集合中的下标位置。

 

分析步骤:

  1. 创建C学生对象;
  2. 通过学生对象创建C学生元素;
  3. 通过名称查找B元素;
  4. 查看B元素在其父元素中的位置;
  5. 获取学生子元素List;
  6. 将C元素插入到List中。

 

通过名字查找元素:

  1. 获取Document;
  2. 获取根元素;
  3. 获取所有学生元素;
  4. 遍历学生元素;
  • 获取学生元素name子元素的文本内容,与指定名称比较;
  • 返回当前学生元素。

 

7 其它方法介绍[夜光:了解即可,会用就行~~]

Node方法:

  1. String asXML():把当前节点转换成字符串,如果当前Node是Document,那么就会把整个XML文档返回;
  2. String getName():获取当前节点名字;Document的名字就是绑定的XML文档的路径;Element的名字就是元素名称;Attribute的名字就是属性名;
  3. Document getDocument():返回当前节点所在的Document对象;
  4. short getNodeType():获取当前节点的类型;
  5. String getNodeTypeName():获取当前节点的类型名称,例如当前节点是Document的话,那么该方法返回Document;
  6. String getStringValue():获取当前节点的子孙节点中所有文本内容连接成的字符串;
  7. String getText():获取当前节点的文本内容。如果当前节点是Text等文本节点,那么本方法返回文本内容;例如当前节点是Element,那么当前节点的内容不是子元素,而是纯文本内容,那么返回文本内容,否则返回空字符串;
  8. void setDocument(Document doc):给当前节点设置文档元素;
  9. void setParent(Element parent):给当前节点设置父元素;
  10. void setText(String text):给当前节点设置文本内容;

 

 

Branch方法:

  1. void add(Element e):添加子元素;
  2. void add(Node node):添加子节点;
  3. void add(Comment comment):添加注释;
  4. Element addElement(String eleName):通过名字添加子元素,返回值为子元素对象;
  5. void clearContent():清空所有子内容;
  6. List content():获取所有子内容,与获取所有子元素的区别是,<name>liSi</name>元素没有子元素,但有子内容;
  7. Element elementById(String id):如果元素有名为“ID”的属性,那么可以使用这个方法来查找;
  8. int indexOf(Node node):查找子节点在子节点列表中的下标位置;
  9. Node node(int index):通过下标获取子节点;
  10. int nodeCount():获取子节点的个数;
  11. Iterator nodeIterator():获取子节点列表的迭代器对象;
  12. boolean remove(Node node):移除指定子节点;
  13. boolean remove(Commont commont):移除指定注释;
  14. boolean remove(Element e):移除指定子元素;
  15. void setContent(List content) :设置子节点内容;

 

 

Document方法:

  1. Element getRootElement():获取根元素;
  2. void setRootElement():设置根元素;
  3. String getXmlEncoding():获取XML文档的编码;
  4. void setXmlEncoding():设置XML文档的编码;

 

 

Element方法:

  1. void add(Attribute attr):添加属性节点;
  2. void add(CDATA cdata):添加CDATA段节点;
  3. void add(Text Text):添加Text节点;
  4. Element addAttribute(String name, String value):添加属性,返回值为当前元素本身;
  5. Element addCDATA(String cdata):添加CDATA段节点;
  6. Element addComment(String comment):添加属性节点;
  7. Element addText(String text):添加Text节点;
  8. void appendAttributes(Element e):把参数元素e的所有属性添加到当前元素中;
  9. Attribute attribute(int index):获取指定下标位置上的属性对象;
  10. Attribute attribute(String name):通过指定属性名称获取属性对象;
  11. int attributeCount():获取属性个数;
  12. Iterator attributeIterator():获取当前元素属性集合的迭代器;
  13. List attributes():获取当前元素的属性集合;
  14. String attributeValue(String name):获取当前元素指定名称的属性值;
  15. Element createCopy():clone当前元素对象,但不会copy父元素。也就是说新元素没有父元素,但有子元素;
  16. Element element(String name):获取当前元素第一个名称为name的子元素;
  17. Iterator elementIterator():获取当前元素的子元素集合的迭代器;
  18. Iterator elementIterator(String name):获取当前元素中指定名称的子元素集合的迭代器;
  19. List elements():获取当前元素子元素集合;
  20. List elements(String name):获取当前元素指定名称的子元素集合;
  21. String elementText(String name):获取当前元素指定名称的第一个元素文件内容;
  22. String elementTextTrime(String name):同上,只是去除了无用空白;
  23. boolean isTextOnly():当前元素是否为纯文本内容元素;
  24. boolean remove(Attribute attr):移除属性;
  25. boolean remove(CDATA cdata):移除CDATA;
  26. boolean remove(Text text):移除Text。

 

 

DocumentHelper静态方法介绍:

  1. static Document createDocument():创建Dcoument对象;
  2. static Element createElement(String name):创建指定名称的元素对象;
  3. static Attribute createAttrbute(Element owner, String name, String value):创建属性对象;
  4. static Text createText(String text):创建属性对象;
  1. static Document parseText(String text):通过给定的字符串生成Document对象;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值