DOM解析XML文件

xml文件在系统开发中是一种很常见的文件格式,特别是接口的报文规范通常采用XML格式。具有简单易懂的结构特点。因此对于XML的解析是比较基础的知识。一般框架会提供公用的XML解析工具类。下面是一个简单的XML解析示例。

示例使用的是org.w3c.dom解析,javax.xml.parsers.SAXParser也可以对XML文件进行解析,但是无法获取节点的上下级关系。特别注意的是org.w3c.dom在解析xml文件时它会将你的回车也作为一个节点。在你的代码中你打印nodeList.getLenth();得到的数值肯定比实际的节点要多。可以使用node instanceof 判断。

如果:node instanceof Text,则输出#text

如果:node instanceof Element,则输出实际节点。

<span style="font-size:14px;">import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

     try {
			String xmlStr = "XML格式字符串";
			Element element = null;
			BufferedInputStream is = new BufferedInputStream(
					new ByteArrayInputStream(xmlStr.getBytes("UTF-8")));
			File xmlFile = new File("E:\\opt\\test.xml");
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document dt = db.parse(</span><span style="font-size:14px;">xmlFile </span><span style="font-size:14px;">);//此处也可以传xml的字符串 is
			// 得到一个elment根元素
			element = dt.getDocumentElement();
			// 获得根节点
			System.out.println("根元素:" + element.getNodeName());
			// 获得根元素下的子节点
			NodeList childNodes = element.getChildNodes();
			// 遍历这些子节点
			for (int i = 0; i < childNodes.getLength(); i++) {
			// 获得每个对应位置i的结点
			Node node = childNodes.item(i);
			if(node instanceof Element){
				System.out.println("----一级子节点:"+node.getNodeName());
				if(node.hasChildNodes()){
					NodeList nodelist2 = node.getChildNodes();
					for(int j = 0; j < nodelist2.getLength(); j++){
						Node node2 = nodelist2.item(j);
						if(node2 instanceof Element){
						System.out.print("-----------二级子节点:"+node2.getNodeName());
						System.out.print("------节点值:"+node2.getTextContent());
						System.out.println("----父节点:"+node2.getParentNode().getNodeName());
						}
					}
				 }
			 }
			
		   }
		}catch (Exception e) {
			e.printStackTrace();
		}</span>
	


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值