javaWeb2.1 XML解析方式之DOM解析

DOM   Document Object Model--------文档对象模型

DOM思想:将整个xml加载到内存中,形成文档对象,所有对xml的操作都在内存文档中进行

DOM是官方xml解析标准


DOM是以层级结构组织的节点或信息片段的集合,是xml数据的一种树形表示

文档中所有的元素、属性、文本都会被解析成node节点


DOM解析快速入门

1、创建xml文档books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book id="b001">
		<name>java</name>
		<price>50</price>
	</book>
	<book id="b002">
		<name>c</name>
		<price>20</price>
	</book>
</books>


2、使用DOM解析XML文件

将整个xml文档加载到内存中:工厂---解析器---解析加载

3、Document通过 getElementsByTagName 获得 节点集合 NodeList 

通过 NodeList 提供 getLength 和 item 遍历 节点集合

对于xml来说,所有的数据都是node节点(元素节点、属性节点、文本节点、注释节点、CDATA节点、文档节点)
node有三个通用API : 
getNodeName():返回节点的名称
getNodeType():返回节点的类型
getNodeValue():返回节点的值  ---- 所有元素节点value都是 null

public class DOMTest {

	@Test
	public void dom1() throws Exception {
		// 1、建立DOM解析工厂
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		// 2、建立解析器
		DocumentBuilder builder = factory.newDocumentBuilder();
		// 3、加载xml文件到内存
		Document document = builder.parse("books.xml");
		NodeList nodeList = document.getElementsByTagName("name");
		for (int i = 0; i < nodeList.getLength(); i++) {
			Element element = (Element) nodeList.item(i);
			System.out.println(element.getNodeName());
			System.out.println(element.getNodeValue());
			System.out.println(element.getNodeType());
			//通过DOM加载内存数据形式解析
			System.out.println(element.getFirstChild().getTextContent());
			//api解析方式
			System.out.println(element.getTextContent());
		}

	}
}

4、DOM解析查询

@Test
	//查询Java书的售价
	public void dom2() throws Exception
	{
		//加载xml到内存
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse("books.xml");
		//全局查询切入
		NodeList nodeList = document.getElementsByTagName("book");
		for (int i = 0; i < nodeList.getLength(); i++) {
			Element book = (Element) nodeList.item(i);
			NodeList children = book.getChildNodes();
			Element element = (Element) children.item(1);
			if (element.getTextContent().equals("java")) {
				//方式一
				Element priceElement = (Element) element.getNextSibling().getNextSibling();
				System.out.println(priceElement.getTextContent());
				//方式二
				Element priceElement2 = (Element) children.item(3);
				System.out.println(priceElement2.getTextContent());
			}
		}
	}
	@Test
	//查询Java书的售价 通过id
	public void dom3() throws Exception{
		//加载xml到内存
				DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
				DocumentBuilder builder = factory.newDocumentBuilder();
				Document document = builder.parse("books.xml");
				//直接通过id查找
				Element element = document.getElementById("b001");
				System.out.println(element);
				System.out.println(element.getChildNodes().item(1).getTextContent());
	}

5、DOM回写

@Test
	//将xml回写到另一个文件
	public void dom4() throws Exception{
		//加载xml到内存
				DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
				DocumentBuilder builder = factory.newDocumentBuilder();
				Document document = builder.parse("books.xml");
		//回写xml用transformer
				TransformerFactory transformerFactory = TransformerFactory.newInstance();
				Transformer transformer = transformerFactory.newTransformer();
				DOMSource domSource = new DOMSource(document);
				StreamResult result = new StreamResult(new File("books_bak.xml"));
				transformer.transform(domSource, result);
	}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值