JAVA解析xml文件(DOM)

DOM方法

实现步骤:

1.创建DocumentBuilderFactory的对象

DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
2.创建DocumentBuilder的对象

DocumentBuilder builder=builderFactory.newDocumentBuilder();
3.通过DocumentBuilder的parse方法加载xml文件,返回一个Document的对象
Document document=builder.parse("books.xml");
4.获取所需要解析的节点的集合    例如获取book节点

NodeList list=document.getElementsByTagName("book");
5.进行遍历这个节点的集合,进行解析属性以及子节点及其内容

一些常用方法如下:

解析属性

  //获取一个book节点
	Node book=list.item(i);
    	//获取book节点属性的集合
 	NamedNodeMap map=book.getAttributes();
   //获取属性
	Node node=map.item(j);
  //获取属性名
String name=node.getNodeName();
//获取属性值
	String value=node.getNodeValue();
解析子节点及其值
//获取book节点的子节点的集合
	NodeList list2=book.getChildNodes();
        for (int j = 0; j < list2.getLength(); j++) {				
 	//判断节点是不是Element属性 因为空格也会算是一个节点
	if (list2.item(j).getNodeType()==Node.ELEMENT_NODE) {
	//获取子节点的name与value
	System.out.print(list2.item(j).getNodeName());
	//由于一个节点的开始与结尾标签中间默认是一个标签  故通过以下方法获取
	System.out.println("-----"+list2.item(j).getFirstChild().getNodeValue());	}					

获取Element节点值的方法还有

list2.item(i).getTextContent()
区别如下:

如果标签下还有一个标签

<name><lala>haha</lala>少年阿宾</name>
使用

list2.item(j).getFirstChild().getNodeValue()
方法时返回值为null  因为子节点为Element类型

用第二个节点则返回haha少年阿宾

代码:

//使用DOM方法解析xml
public class Dom {
	public static void main(String[] args) {
		//首先创建DocumentBuilderFactory的对象
		DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
		//创建DocumentBuilder的对象,需要try——catch
		try {
			DocumentBuilder builder=builderFactory.newDocumentBuilder();
		    //通过DocumentBuilder的parse方法加载xml文件,返回一个Document的对象
			Document document=builder.parse("books.xml");
			//获取所有book节点的集合
			NodeList list=document.getElementsByTagName("book");
		    System.out.println("共有"+list.getLength()+"本书");
		    //遍历每一本书
		    for(int i=0;i<list.getLength();i++) {
		    	//获取一个book节点
		    	Node book=list.item(i);
		    	//获取book节点属性的集合
		    	NamedNodeMap map=book.getAttributes();
		    	System.out.println("第"+(i+1)+"本书共有"+map.getLength()+"个属性");
		    	//遍历每个属性
		    	for (int j = 0; j < map.getLength(); j++) {
		    		//获取属性
		    		Node node=map.item(j);
					//获取属性名
		    		String name=node.getNodeName();
		    		System.out.print("属性名为"+name);
		    		//获取属性值
		    		String value=node.getNodeValue();
		    		System.out.println("-----属性值为"+value);
				}
		    	//获取book节点的子节点的集合
		    	NodeList list2=book.getChildNodes();
		        for (int j = 0; j < list2.getLength(); j++) {				
		        	//判断节点是不是Element属性 因为空格也会算是一个节点
					if (list2.item(j).getNodeType()==Node.ELEMENT_NODE) {
						//获取子节点的name与value
						System.out.print(list2.item(j).getNodeName());
						//由于一个节点的开始与结尾标签中间默认是一个标签  故通过以下方法获取
						System.out.println("-----"+list2.item(j).getFirstChild().getNodeValue());
					}					
				}
		    }
		    
		    } catch (SAXException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		     catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}

}

xml:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book id="1">
          <name>少年阿宾</name>
          <year>2002</year>
          <price>0.01元</price>
          </book>


    <book id="2">
            <name>少妇白洁</name>
            <year>1997</year>
            <price>99元</price>
      </book>


</bookstore>








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值