Java解析XML文档方式一—DOM

文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。
使用DOM方式解析xml文档的基本步骤:
1、创建DocumentBuilderFactory工厂对象。
2、创建DocumentBuilder类对象。
3、构建Document对象。
4、通过Document对象.getElementsByTagame()方法获取节点,返回值是一个NodeList对象。
5、遍历第四步获取的节点,获取该节点的子节点(getChildNodes)。如果节点有属性,可以通过节点.getAttributes()方法获取,返回值是一个NamedNodeMap对象,取得属性值可以通过NamedNodeMap对象.getNamedItem("属性名").getNodeValue()的方式获取。
6、如果节点的层级比较多,那么依次往下遍历即可。
6、获取节点值,当遍历到达根部时,可以通过节点.getTextContent()方法取得节点的值。

以下是一个简单的解析xml文档的小例子:
例如有以下一个xml文件,文件名为Student.xml,里面保存了一些学生信息,接下来通过java解析这个文档。

<?xml version="1.0" encoding="UTF-8"?>
<Students>
    <Student name="zhangsan">
        <age>22</age>
        <height>176</height>
    </Student>
    <Student name="lisi">
        <age>20</age>
        <height>186</height>
    </Student>
    <Student name="wangwu">
        <age>24</age>
        <height>196</height>
    </Student>
</Students>

构建一个java类


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;

public class Dom {
    public static void main(String[] args)
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//构建工厂类对象
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse("Student.xml");

            NodeList list = doc.getElementsByTagName("Student");//取得根节点

            for(int i=0;i<list.getLength();i++)
            {
                String age = new String();
                String height = new String();
                Node node = list.item(i);
                NamedNodeMap map = node.getAttributes();//获取节点属性
                String name = map.getNamedItem("name").getNodeValue();//获取节点属性值

                NodeList students = node.getChildNodes();//获取子节点

                for(int j=0;j<students.getLength();j++)
                {
                    Node s = students.item(j);
                    if(s.getNodeName().equals("age"))
                    {
                        age = s.getTextContent();
                    }else if(s.getNodeName().equals("height"))
                    {
                        height = s.getTextContent();
                    }

                }

                System.out.println("姓名:" + name + " 年龄:" +age + " 身高:" + height);
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

程序运行的结果是在控制台打印所有学生的基本信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值