【XML】使用DOM解析XML文件

来源:互联网 发布:淘宝装修模板市场 编辑:程序博客网 时间:2024/05/12 07:34
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.Element;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;/** * 使用DOM解析XML文件 * @author admin * */public class Main {public static void main(String[] args) {//创建一个DocumentBuilderFactory的对象DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();try {//创建DocumentBuilder的对象DocumentBuilder db = dbf.newDocumentBuilder();//通过DocumentBuilder的对象的parse方法加载book.xml到当前目录下Document document = db.parse("demo/book.xml");//获取所有的book节点的集合NodeList bookList = document.getElementsByTagName("book");//通过NodeList的getLength()方法获取bookList的长度System.out.println("一共有:"+bookList.getLength()+"本书");for(int i=0;i<bookList.getLength();i++){System.out.println("下面开始遍历第"+(i+1)+"本书的内容");//通过item(i)获取获取一个book节点Node book = bookList.item(i);//获取book节点的所有属性的集合NamedNodeMap attrs = book.getAttributes();System.out.println("第"+(i+1)+"本书共有"+attrs.getLength()+"个属性");//遍历book的属性for(int j=0;j<attrs.getLength();j++){//通过item(index)方法获取book节点的某个属性Node attr = attrs.item(j);//获取属性名System.out.print("属性名:"+attr.getNodeName()+",");//获取属性值System.out.println("属性值:"+attr.getNodeValue());}/* * 在知道book的属性值的情况下可以用以下方法遍历,并且有且只有一个id属性 * 将book节点进行强制类型转换为Element类型Element book = (Element) bookList.item(i);String attrValue = book.getAttribute("id");System.out.println("id的属性值为"+attrValue);*///解析book节点的子节点NodeList childNodes = book.getChildNodes();//遍历childNodes获取每个节点的节点名和节点值System.out.println("第"+(i+1)+"本书有"+childNodes.getLength()+"个子节点");for(int k=0;k<childNodes.getLength();k++){//区分出text类型的node以及element类型的nodeif(childNodes.item(k).getNodeType()==Node.ELEMENT_NODE){//获取了element类型节点的节点名System.out.print("节点名:"+childNodes.item(k).getNodeName()+",");//System.out.println("节点值:"+childNodes.item(k).getFirstChild().getNodeValue());System.out.println("节点值:"+childNodes.item(k).getFirstChild().getTextContent());}}}} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

book.xml结构

<?xml version="1.0" encoding="UTF-8"?><bookstore><book id="1"><name>安徒生童话</name><author>安徒生</author><year>2016</year><page>521</page></book><book id="2"><name>名侦探柯南</name><author>青山刚昌</author><year>1996</year><page>5412</page></book></bookstore>

输出结果

  • 一共有:2本书

  • 下面开始遍历第1本书的内容

  • 第1本书共有1个属性

  • 属性名:id,属性值:1

  • 第1本书有9个子节点

  • 节点名:name,节点值:安徒生童话

  • 节点名:author,节点值:安徒生

  • 节点名:year,节点值:2016

  • 节点名:page,节点值:521

  • 下面开始遍历第2本书的内容

  • 第2本书共有1个属性

  • 属性名:id,属性值:2

  • 第2本书有9个子节点

  • 节点名:name,节点值:名侦探柯南

  • 节点名:author,节点值:青山刚昌

  • 节点名:year,节点值:1996

  • 节点名:page,节点值:5412


1 0
原创粉丝点击