java处理xml格式的dom_JAVA使用DOM方式来解析XML文件

了解XML文件

xml表现:以.xml为文件扩展名的文件

xml文件的结构为树形结构

节点名区分大小写

在java程序中读取xml文件的过程称为解析xml文件

解析的目的:获取节点名、节点值、属性名、属性值。

通常使用四种解析方式:DOM、SAX、DOM4J、JDOM

解析xml文件的准备工作

1、创建一个DocumentBuilderFactory对象

DocumentBuilderFactory dbf=DocumentBuilderFactory.newinstance();

2、创建一个DocumentBuilder对象

DocumentBuilder db=dbf.newDoucumentBuilder();

3、通过DocumentBuilder对象的parse(String fileName)方法来解析xml文件

Document d=db.parse("url");//把XML文件加载到当前项目下

在java程序中如何获取xml文件的内容

通过上面的准备工作之后,我们把XML文件就加载到了项目中,然后我们可以通过Document.getElementsByTagName("TagName");方法来获取XML中节点的数据。这个方法会返回一个NodeList类型的值,直译过来就是一个节点集合。所以我们可以用NodeList来接受返回值

NodeList nl=Document.getElementsByTagName("TagName");

获取到了XML中的节点集合之后,可以通过getLength()方法来获取集合中的节点个数。同时可以用item(index);方法来获取集合当中的节点,这个方法会返回一个Node类型的值。

Node n=nl.item(index);

获取到了节点之后,我们可以通过getAttributes();方法来获取节点的属性值,它会返回一个NameNodeMap类型的集合,里面有节点所有的属性。

NamedNodeMap attrs=book.getAttributes();

然后通过item方法来获取attr中的属性,这个方法会返回一个Node类型的值,我们接收之后就可以通过调用 getNodeName以及getNodeValue两个方法来分别获取属性名以及属性值了。

除了获取节点的的属性之外,我们还可以获取节点的子节点。通过节点的getChildNodes函数,可以返回一个NodeList集合,里面有所有的子节点。需要注意的是子节点指的是节点中包含的所有数据,包括换行符。换行符会返回Test的值#test。在实际操作中,可以使用getNodeType函数来返回子节点的类型,从而来跳过换行符。

if(getNodeType()==Node.ELEMENT_NODE)

最后使用getNodeName函数可以获取到子节点的名字。如果还需要获得子节点的值,可以使用getTextContent函数,或者是使用getFirstChild先获取子节点的子节点,再使用getNodeValue函数来获取值。

完整的示例代码:

package com.DOM.test;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;

import org.w3c.dom.NamedNodeMap;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;

public class DOMTest {

public static void main(String[] args) throws IOException,SAXException,NullPointerException{

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

try {

DocumentBuilder db=dbf.newDocumentBuilder();

Document d=db.parse("books.xml");

NodeList nl=d.getElementsByTagName("book");

System.out.println("集合节点的个数:"+nl.getLength());

for(int i=0;i

Node book=nl.item(i);

NamedNodeMap attrs=book.getAttributes();

System.out.println("节点属性的个数:"+attrs.getLength());

for(int j=0;j

Node attr=attrs.item(j);

System.out.println("属性名:"+attr.getNodeName());

System.out.println("属性值:"+attr.getNodeValue());

}

NodeList chileList=book.getChildNodes();

for(int k=0;k

if(chileList.item(k).getNodeType()==Node.ELEMENT_NODE){

System.out.println(chileList.item(k).getNodeName());

System.out.println(chileList.item(k).getFirstChild().getNodeValue());

System.out.println(chileList.item(k).getTextContent());

}

}

}

} catch (ParserConfigurationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

用于测试的XML文件:

冰与火之歌

乔治马丁

2014

89

安徒生童话

2004

77

English

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值