java xml解析 Dom解析

  • Post author:
  • Post category:java


1 Dom解析:

把整个文档的内容 都读到 内存中,再解析

整个文档的根叫 document

html文档就是一种xml 文件

每一个标签就是 一个 Dom节点

2 DOM解析XML的优点:

因为分配了一个 树形结构,很方便实现增删改

3 DOM解析XML的缺点:

如果解析的文件过大,一次性在内存中分配一个 树形结构,造成内存的溢出.

step1 项目文件夹放xml文件: student.xml

<?xml version="1.0" encoding="UTF-8"?>
<人>
	<学生>
		<姓名>张三</姓名>
		<性别>男</性别>
		<年龄>15</年龄>
		<爱好>蓝球</爱好>
	</学生>
	<学生>
		<姓名>李四</姓名>
		<性别>男</性别>
		<年龄>16</年龄>
		<爱好>足球</爱好>
	</学生>
	<学生>
		<姓名>小P</姓名>
		<性别>男</性别>
		<年龄>16</年龄>
		<爱好>吃</爱好>
	</学生>
</人>

step2  Dom解析

package com.android.andriodM;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomParseTest {
	
	//1 获取xml文件节点的内容
	@Test
	public void domGet() throws Exception{
		Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("student.xml");
		NodeList  nodeList = doc.getElementsByTagName("姓名");
		
		//1.1 找到第2个"姓名"标签
		Node node = nodeList.item(1);
		String content = node.getTextContent();
		System.out.println("第2个姓名:"+content);
		
		System.out.println("--------------------");
		
		
		//1.2  遍历"姓名"标签组
		int length = nodeList.getLength();
		for (int i = 0; i < length; i++) {
			System.out.println("姓名"+i+":"+nodeList.item(i).getTextContent());
		}
		
	}
	
	//2 修改xml 文件节点的内容
	@Test
	public void domSet() throws Exception{
		
		Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("student.xml");
		NodeList  nodeList = doc.getElementsByTagName("姓名");
		//1 找到第3个标签,修改节点的内容
		Node node = nodeList.item(2);
		node.setTextContent("花花");
		//2 将修改的内存数据 写到 磁盘中
		//内存中的文件
		Source xmlSource = new DOMSource(doc);
		//磁盘中的目标文件
		Result outputTarget = new StreamResult("student.xml");
		Transformer transformer = TransformerFactory.newInstance().newTransformer();
		//转化
		transformer.transform(xmlSource, outputTarget);
		
	}

	
}

step3 结果

1 获取xml文件节点的内容

2 修改xml 文件节点的内容



版权声明:本文为m0_45877477原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。