XML文档结构分析

获取Document文档对象

DOM(DocumentObject Model):文档对象模型.把XML文件中的不同结构抽象成一个个对象.

或者说,使用面向对象的方式来解析XML.

------------------------------------------------------------------------------------------

要操作XML,先就得有Document对象:

把一个XML文件加载进内存的时候,在内存中形成所谓的一种树状结构,我们把这一个结构称之为Document对象.

注意:

我们在Java代码中所做的增/删/改/查操作,都仅仅是操作的是内存中的Document对象,和磁盘中的XML文件没有关系.

比如:删除一个联系人信息之后,XML文件中数据依然存在,此时出现内存中的数据和磁盘文件中的数据不同步,所以,对于增删改操作,我们需要做同步操作(把内存中的数据和磁盘的XML文件数据保持一致).

DOM:在第一次的时候就会把XML文件加载进内存,如果XML文件过大,可能会造成内存的溢出.

DOM:在做增删改查操作的时候比较简单,但是性能却不高(线性搜索).

获取Document文档对象:

1):表示出需要被操作的XML文件的路径,注意是文件的路径,不是文件所在的目录.

File f = newFile("D:/JavaApps/dom-dom4j/contacts.xml");

2):根据DocumentBuilderFactory类,来获取DocumentBuilderFactory对象.

注意:工厂设计模式往往体现着单例设计模式.

DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();

3):根据DocumentBuilderFactory对象,构建DocumentBuilder对象.

注意:XxxFactory,就是用来创建Xxx对象的.

DocumentBuilder builder =factory.newDocumentBuilder();

4):根据DocumentBuidler对象,构建Document对象.

Document doc = builder.parse(f);

DOM操作练习

需求1、得到某个具体的文本节点的内容:取出第二个联系人的名字.

操作步骤:

①:获取Document文档对象.

②:获取XML的根元素对象:contacts.

③:获取根元素下的第二个linkman元素.

④:获取该linkman元素下的第一个name元素.

⑤:获取该name元素的文本内容.

import java.io.File;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;public class FindXml {/*** @param args* @throws Exception */public static void main(String[] args) throws Exception {File f = new File("F:/java/javaApp/XML/cc.xml");DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document root = builder.parse(f);NodeList nodelist = root.getElementsByTagName("linkman");Element item = (Element) nodelist.item(1);Element nameEl = (Element) item.getElementsByTagName("name").item(0);String name = nameEl.getTextContent();System.out.println(name);}}

修改xml并且保存到文件

import java.io.File;
import java.io.IOException;import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;public class DoucmentRevise {/*** @param args* @throws Exception * @throws IOException * @throws SAXException */public static void main(String[] args) throws SAXException, IOException, Exception {File f = new File("info.xml");Document root = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);Element nameEl = (Element) root.getElementsByTagName("linkman").item(1);Element nameEL = (Element) nameEl.getElementsByTagName("name").item(0);nameEL.setTextContent("xiaoyi");Transformer trans = TransformerFactory.newInstance().newTransformer();Source xmlSource = new DOMSource(root);Result outputTarget = new StreamResult(f);trans.transform(xmlSource, outputTarget);}}

向指定元素节点中增加子元素节点:增加一个联系人信息

import java.io.File;
import java.io.IOException;import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;public class DocumentAddElements {/*** @param args* @throws Exception * @throws IOException * @throws SAXException */public static void main(String[] args) throws SAXException, IOException, Exception {File f = new File("info.xml");Document root = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);Element doc = root.getDocumentElement();Element linkmanEl = root.createElement("linkman");Element nameEl = root.createElement("name");Element ageEl = root.createElement("age");nameEl.setTextContent("吴彦祖");ageEl.setTextContent("34");linkmanEl.appendChild(nameEl);linkmanEl.appendChild(ageEl);doc.appendChild(linkmanEl);Transformer trans = TransformerFactory.newInstance().newTransformer();trans.transform(new DOMSource(root), new StreamResult(f));}}

设置元素的属性和得到元素的属性

import java.io.File;
import java.io.IOException;import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;public class DocumentSetAtt {/*** @param args* @throws Exception * @throws IOException * @throws SAXException */public static void main(String[] args) throws SAXException, IOException, Exception {File f = new File("info.xml");Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);Element linmanEl = (Element) doc.getElementsByTagName("linkman").item(0);String id = linmanEl.getAttribute("id");System.out.println(id);//设置吴彦祖id为3Element wuEl = (Element) doc.getElementsByTagName("linkman").item(2);wuEl.setAttribute("id", "3");//同步操作Transformer trans = TransformerFactory.newInstance().newTransformer();Source xmlSource = new DOMSource(doc);Result outputTarget = new StreamResult(f);trans.transform(xmlSource, outputTarget);}}

删除子结点元素

import java.io.File;
import java.io.IOException;import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;public class DocumentDel {/*** @param args* @throws Exception * @throws IOException * @throws SAXException */public static void main(String[] args) throws SAXException, IOException, Exception {Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("info.xml"));Element root = doc.getDocumentElement();Element linkmanEl = (Element) doc.getElementsByTagName("linkman").item(2);linkmanEl.getParentNode().removeChild(linkmanEl);Transformer trans = TransformerFactory.newInstance().newTransformer();trans.transform(new DOMSource(doc), new StreamResult(new File("info.xml")));}}

创建新的xml并且设置内容

import java.io.File;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;
import org.w3c.dom.Element;public class DocumentCreat {/*** @param args* @throws Exception */public static void main(String[] args) throws Exception {File f = new File("xx.xml");//设置文档对象Document doc = null;//设置节点最高Element root = null;DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();if(f.exists()){builder.parse(f);}else{//如果文件不存在doc = builder.newDocument();//设置xml版本号doc.setXmlVersion("1.0");//创建根元素root = doc.createElement("contacts");//和doc关联,contacts是顶级元素doc.appendChild(root);}//创建元素Element linkmanEl = doc.createElement("linkmaEl");Element nameEl = doc.createElement("name");Element ageEl = doc.createElement("age");//创建的元素添加内容nameEl.setTextContent("will");ageEl.setTextContent("18");//加入到父节点linkmanEl.appendChild(nameEl);linkmanEl.appendChild(ageEl);//根节点 添加创建的节点root.appendChild(linkmanEl);//同步操作Transformer trans = TransformerFactory.newInstance().newTransformer();trans.transform(new DOMSource(doc), new StreamResult(f));}}

dom4j查询所有信息

package dom4j;import java.io.File;
import java.util.List;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class Dom4jTest {/*** @param args* @throws Exception */public static void main(String[] args) throws Exception {File f = new File("info.xml");SAXReader reader = new SAXReader();Document doc = reader.read(f);Element root = doc.getRootElement();List<Element> elements = root.elements("linkman");for (Element element : elements) {String id = element.attributeValue("id");String name = element.elementText("name");String age = element.elementText("age");System.out.println("id="+id+",name="+name+",age="+age);}}}

dom4j增加一个联系人

package dom4j;import java.io.File;
import java.io.FileWriter;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;public class Dom4jCreat {/*** @param args* @throws Exception */public static void main(String[] args) throws Exception {File f = new File("info.xml");SAXReader reader = new SAXReader();Document doc = reader.read(f);Element root = doc.getRootElement();Element linkmanEl = root.addElement("linkman");linkmanEl.addAttribute("id", "5");linkmanEl.addElement("name").setText("西门吹雪");linkmanEl.addElement("age").setText("33");//同步操作 快捷保存//FileWriter out = new FileWriter(f);//doc.write(out);//out.close();//同步操作,好看的保存方式OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter writer = new XMLWriter(new FileWriter(f),format);writer.write(doc);writer.close();}}

java2 day03 XML DOM4J相关推荐

  1. java xml dom4j 解析_在JAVA中怎么用DOM和DOM4j解析XML啊?

    二.XML文件 三.开始解析 public class JDOMTest { public static void main(String[] args) { // 进行对books.xml文件的JD ...

  2. xml+dom4j+xpath学生管理系统

    <?xml version="1.0" encoding="UTF-8"?><student> <stu> <name ...

  3. java xml dom4j 解析_Java使用DOM4J解析XML

    Dom4J方式解析XML文件.dom4j是非官方提供的xml文件解析方式,因此需要去第三方下载dom4j的jar包 File file = new File("D:\\chengmuzhe\ ...

  4. [xml]DOM4j解析

    (文字部分引用何处忘了....) JDOM与DOM主要有两方面不同.首先,JDOM仅使用具体类而不使用接口.这在某些方面简化了API,但是也限制了灵活性.第二,API大量使用了Collections类 ...

  5. dom4j解析xml,dom4j创建xml

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...

  6. Java XML解析工具 dom4j介绍及使用实例

    Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...

  7. xml 转map dom4j

    http://ziyu-1.iteye.com/blog/469003 传过来一个xml文件,需要转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.  转换规则:  1.主要是Ma ...

  8. 使用jdk DOM,SAX和第三方jar包DOM4J创建,解析xml文件

    xml的创建,解析 1. 什么是xml文件 1.1 什么是xml文件 1.2 解析xml的方式,优缺点 2. 使用dom操作xml文件 2.1 使用dom创建xml文件 2.2 使用dom解析xml文 ...

  9. dom4j创建、解析xml文件(增删改查)

    先对xml文件进行解析,xml文件如下图所示 <?xml version="1.0" encoding="UTF-8"?> <?eclipse ...

最新文章

  1. HttpClient学习
  2. java之集合框架一Collection接口
  3. hdu4845 状态压缩BFS
  4. Matlab R2018a版离线使用帮助文档方法
  5. 温柔得叫人想死:日本电影《火宅之人》手记
  6. hdu---2087---剪花布条
  7. 宝塔面板安装WordPress
  8. cesium加载S3M白膜,通过分层设色实现渐变效果,设置点光源
  9. MAME打开ROM报错解决办法
  10. 烤仔看世界 | “女王”的骗局
  11. Python线程 一
  12. 4.4 使用倾斜工具和整形工具制作图标 [Illustrator CC教程]
  13. python 小学生教材全解_小学生教材全解
  14. 3D数学基础:正交矩阵
  15. 基于javaweb流浪动物救助网站(前端+后端)
  16. continue在while循环的使用,禁忌
  17. Java实现 蓝桥杯VIP 算法提高 洗牌
  18. ERP系统的开发------(整理)
  19. 微信 android 平台 应用签名错误,详解IOS微信上Vue单页面应用JSSDK签名失败解决方案...
  20. G711 G723 G729,带宽计算

热门文章

  1. 谈谈运营经验:颠覆式创新
  2. The quieter you become,The more you are able to hear.
  3. 千呼万唤,小灰的新书出版了!
  4. Java版SLG游戏 竜退治2
  5. java常见的hash算法_常见的哈希算法和用途
  6. Entity Framework Core 之Modeling Relationships
  7. 明翰英语教学系列之雅思阅读篇V0.9(持续更新)
  8. Redis三主三从集群搭建
  9. Unity SteamVR获取手柄按钮触发事件
  10. activiti会签功能