一、DOM简单介绍
DOM |
作用:把文档中的成员描述成一个个对象; 使用场景:使用Java代码操作XML、使用JavaScript操作HTML等等; 特点:在加载的时候,一次性把整个XML文档加载进内存,在内存中形成一棵树(Document对象),其实实际操作的是内存中的DOM树,和本地磁盘中的XML文件没有直接关系,要做同步操作把内存中的数据更新到XML文件(增删改操作完成之后,都需要做同步操作)。 缺点:若XML文件过大,可能造成内存溢出问题 注意:使用import导入类/接口,注意使用org.w3c组织的。 |
二、获取Document文档对象步骤:
操作步骤与顺序 | |
1、获取需要操作的XML文件的路径 | private File f = new File("xml文件路径"); |
2、创建DocumentBuilderFactory对象(工厂类中一般都有一个静态方法用于返回房前工厂类对象) |
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); |
3、根据工厂对象,创建DocumentBuilder对象 | DocumentBuilder builder = factory.newDocumentBuilder(); |
4、根据builder对象去解析一个已经存在的XML文件,从而得到Document对象 |
Document doc = builder.parse(f); |
根据DocumentBuilder创建Document对象两种不同方式(newDocument和parse)比较:
Document doc = builder.newDocument(); | 当XML文档不存在的时候,使用此方式在内存中先创建出一颗树对象(Document) |
Document doc = builder.parse(File对象); | 当XML文档存在的时候,只需要直接解析即可 |
解析:一般指将String描述的事物转换为描述该事物的类型。
三、实际操作XML示例
XML文档内容:
<?xml version="1.0" encoding="UTF-8"?>
<contacts>
<linkman>
<name>xiaokeai</name>
<email>[email protected]</email>
<address>长沙</address>
<group>ttyy</group>
</linkman>
<linkman>
<name>xiaochihuo</name>
<email>[email protected]</email>
<address>成都</address>
<group>天河</group>
</linkman>
</contacts>
需求一:得到某个具体的文本节点内容 --> 取出第二个联系人
@Test
public void test1() throws Exception {
// 1、获取Document文档对象
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
// 2、获取XML中的根元素(contacts)
Element root = doc.getDocumentElement();
// 3、获取第二个联系人元素(linkman)
//获取根元素中所有linkman元素
Element linkmanE1 = (Element)root.getElementsByTagName("linkman").item(1);
// 4、获取linkman元素下的name子元素
Element nameE1 = (Element)linkmanE1.getElementsByTagName("name").item(0);
// 5、获取name元素的文本内容
Assert.assertEquals("xiaochihuo", nameE1.getTextContent()); //使用断言
}
Node中常用方法 | String getTextContent():获取元素的文本内容 | ||||||
Document中常用方法 |
|
||||||
Element中常用方法 | NodeList getElementByTagName(String tagName):从当前元素的子元素中,根据元素的名称获取多个元素对象集合 |