JAVA解析xml文件(DOM)

来源:互联网 发布:玲珑加速器 知乎 编辑:程序博客网 时间:2024/06/17 17:37

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与valueSystem.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方法解析xmlpublic class Dom {public static void main(String[] args) {//首先创建DocumentBuilderFactory的对象DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();//创建DocumentBuilder的对象,需要try——catchtry {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与valueSystem.out.print(list2.item(j).getNodeName());//由于一个节点的开始与结尾标签中间默认是一个标签  故通过以下方法获取System.out.println("-----"+list2.item(j).getFirstChild().getNodeValue());}}    }        } catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}     catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.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>








原创粉丝点击