一.document对象:
要操作XML,先就得有Document对象:
把一个XML文件加载进内存的时候,在内存中形成所谓的一种树状结构,我们把这一个结构称之为DOM树.
注意:
我们在Java代码中所做的增/删/改/查操作,都仅仅是操作的是内存中的Document对象,和磁盘中的XML文件没有关系.
比如:删除一个联系人信息之后,XML文件中数据依然存在,此时出现内存中的数据和磁盘文件中的数据不同步,所以,对于增删改操作,我们需要做同步操作(把内存中的数据和磁盘的XML文件数据保持一致).
DOM:在第一次的时候就会把XML文件加载进内存,如果XML文件过大,可能会造成内存的溢出.
DOM:在做增删改查操作的时候比较简单,但是性能却不高(线性搜索).
二.获取Document对象:
public class DOMTest {
@Test
public void test1() throws Exception{
/*1):表示出需要被操作的XML文件的路径,注意是文件的路径,不是文件所在的目录.
File f = new File(...);
2):根据DocumentBuilderFactory类,来获取DocumentBuilderFactory对象.
注意:工厂设计模式往往体现着单例设计模式.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance() ;
3):根据DocumentBuilderFactory对象,构建DocumentBuilder对象.
注意:XxxFactory,就是用来创建Xxx对象的.
DocumentBuilder build = factory .newDocumentBuilder();
4):根据DocumentBuidler对象,构建Document对象.
Document doc = build.parse(f);*/
File file = new File("F:\\works\\xx.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(file);
System.out.println(document);
}
}
三.常用API:
Document接口 | Element getDocumentElement() : 获取文档的根元素Element getElementById(String elementId) : 该方法只有使用ID约束才能使用NodeList getElementsByTagName(String tagname) : 在整个文档中根据元素的名称获取元素Element createElement(String tagName) : 根据元素的名称创建元素 |
---|---|
Element接口 | NodeList getElementsByTagName(String name) : 根据元素的名称获取多个元素void setAttribute(String name, String value) : 给元素设置属性名和属性值String getAttribute(String name) : 根据属性名获取属性值 |
Node接口:
String getTextContent() : 获取节点的文本内容
void setTextContent(String textContent) : 设置节点的文本内容
Node appendChild(Node newChild) : 给当前节点添加子节点
父.appendChild(子);
Node removeChild(Node oldChild) : 删除当前节点的子节点
父.removeChild(子);
Node getParentNode() : 获取当前节点的父节点
四.DOM4J:
是由第三方开源组织编写的一套使用Java语言高效解析XML的工具
DOM操作和思路和DOM4J的操作是一样的,仅仅调用的方法名字变了
DOM解析特点: 简单,思路思维比较清晰
DOM4J特点:更加简单,更加清晰,查询效率比DOM解析效率高