xml的dom解码方式

DOM模式解析XML,是把整个XML文档当成一个对象来处理,会先把整个文档读入到内存里。是基于树的结构,通常需要加载整文档和构造DOM树,然后才能开始工作。

优点:
a、由于整棵树在内存中,因此可以对xml文档随机访问
b、可以对xml文档进行修改操作
c、较sax,dom使用也更简单。

缺点:
a、整个文档必须一次性解析完
b、由于整个文档都需要载入内存,对于大文档成本高

例子:

public class Test {
	public static void main(String[] args) throws Exception {
		File file = new File("dom.xml");
		(new Test()).readXML(file);
	}
public void readXML(File file) throws Exception {
	// 定义工厂APT,使应用程序能够从XML文件获取生成的DOM对象树的解析器
	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	// 定义从XML文档获取DOM文档实例的API。 使用这个类,应用程序员可以从XML获得一个Document 。
	DocumentBuilder builder = factory.newDocumentBuilder();
	// 通过将给定URI的内容解析为XML文档,并返回一个新的DOM Document对象
	Document document = builder.parse(file);
	// getDocumentElement()这是一个方便属性,允许直接访问作为文档的文档元素的子节点
	Element element = document.getDocumentElement();
	listAllChildNodes(element, 0);
}

// XML文档中节点(元素)的表示。 此接口使用用于获取和设置节点值,获取和设置节点的父节点以及删除节点的方法来扩展标准的DOM节点接口
public void listAllChildNodes(Node node, int level) {
	if (node.getNodeType() == node.ELEMENT_NODE) {// 节点是 Element 。
		boolean hasTextChild = false;
		String levelSpace = "";
		for (int i = 0; i < level; i++) {
			levelSpace += "  ";
		}

		System.out.print(levelSpace + "<" + node.getNodeName() + (node.hasAttributes() ? " " : ">"));
		if (node.hasAttributes()) {// 返回此节点是否有任何子节点。
			NamedNodeMap namedNodeMap = node.getAttributes();// A NamedNodeMap包含此节点的属性(如果是 Element )或 null否则。
			for (int i = 0; i < namedNodeMap.getLength(); i++) {
				System.out.print(namedNodeMap.item(i).getNodeName() + "=\""// 字符串里含双引号要用到转义字符\
						+ namedNodeMap.item(i).getNodeValue() + "\""
						+ (i == (namedNodeMap.getLength() - 1) ? "" : " "));
			}
			System.out.println(">");
		}

		if (node.hasChildNodes()) {// 返回此节点是否有任何子节点。
			level++;
//				NodeList接口提供了节点的有序集合的抽象,而不定义或约束如何实现该集合。 NodeList DOM中的对象是活的。 
//				NodeList中的项目可以通过整数索引访问,从0开始。
				NodeList nodeList = node.getChildNodes();
				for (int i = 0; i < nodeList.getLength(); i++) {
					if (nodeList.item(i).getNodeType() == Node.TEXT_NODE// 节点是一个 Text节点。
							&& (!nodeList.item(i).getTextContent().matches("\\s+"))) {
						hasTextChild = true;
						System.out.print(nodeList.item(i).getTextContent());
					} else if (nodeList.item(i).getNodeType() == Node.ELEMENT_NODE) {
						System.out.println();
						listAllChildNodes(nodeList.item(i), level);
					}
				}
				level--;
			}
		System.out.print(((hasTextChild) ? "" : "\n" + levelSpace) + "</" + node.getNodeName() + ">");
		}
	}
}

dom解码方式是通过将xml转化成树形结构,通过树的结点来对xml进行解析的,所以该方式能够对xml文档进行增删改查。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值