xml解析

本文通过一个具体的示例展示了如何使用DOM方式解析XML文档。详细介绍了创建解析器、解析XML并构建DOM树的过程,并提供了完整的Java代码实现及运行结果。

DOM把XML文映射成一个倒挂的树.
使用DOM解析XML文档的步骤:
(1)创建解析器工厂对象
(2)由解析器工厂对象创建解析器对象
(3)由解析器对象对指定XML文件进行解析,构建相应DOM树,创建Document对象
(4)以Document对象为起点对DOM树的节点进行增删改查操作。

//xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Pet [
<!ELEMENT pet (dogs,cat)>
<!ELEMENT dogs (dog*)>
<!ELEMENT dog (name,age,sex)>
<!ATTLIST dog id CDATA #REQUIRED>
<!ELEMENT cat (name,age,sex)>
]>
<pet>
  <dogs>
    <dog id="1">
      <name>aa</name>
      <age>10</age>
      <sex>10</sex>
    </dog>
    <dog id="2">
      <name>bb</name>
      <age>20</age>
      <sex>20</sex>
    </dog>
  </dogs>
  <cat>
    <name>kitty</name>
    <age>5</age>
    <sex>男</sex>
  </cat>
</pet>


//xml解析代码:
package 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.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Pet{
  public static void main(String[] args){
    DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
    try {
      DocumentBuilder db=dbf.newDocumentBuilder();
      Document document=db.parse("src/Test/Pet.xml");
      NodeList dogList=document.getElementsByTagName("dog");
      System.out.println("一共有"+dogList.getLength()+"只狗狗");
      for(int i=0;i<dogList.getLength();i++){
        Node dog=dogList.item(i);
        Element elem=(Element)dog; (方:将node转化成element)
        String id=elem.getAttribute("id");
        System.out.println(id);
        for(Node node=elem.getFirstChild();node!=null;node=node.getNextSibling()){
          if(node.getNodeType()==Node.ELEMENT_NODE){
            String name=node.getNodeName();
            String value=node.getFirstChild().getNodeValue();
            System.out.println(name+":"+value);
          }
        }
      }
    } catch (ParserConfigurationException e) {
      e.printStackTrace();
    } catch (SAXException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

 

//程序运行结果:
一共有2只狗狗
1
name:aa
age:10
sex:10
2
name:bb
age:20
sex:20

转载于:https://www.cnblogs.com/wangzhaofang/p/8301591.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值