免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1549 | 回复: 0
打印 上一主题 下一主题

java解析xml文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-19 15:25 |只看该作者 |倒序浏览
    用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API (Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object Module)称为DOM。Sun公司提供了Java API for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的XML解析器。
JAXP接口包含了三个包:
(1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口。
(2)org.xml.sax  用于对XML进行语法分析的事件驱动的XML简单API(SAX)
(3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。
    当然还有很多其他的解析xml的jar,只说sun提供的接口!
    使用DOM解析XML文档
我们现在来看看DOM是如何解析XML的吧!同样的,我将从一个简单的不能再简单的例子来说明DOM是如何解析XML文档的,先让我们看看XML是什么内容吧:
?xml version="1.0" encoding="UTF-8"?>
books home="8242954" tel="13181805011" >
  book email="123@990.net">
     name id="1">java/name>
     price>102/price>
  /book>
   book email="tian_bian_fei@163.com">
     name id="2">c++/name>
     price>100/price>
  /book>
/books>
解析这个XML文件的Java代码 :

public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            /*
             * DOM结点 DOM是一些节点的集合,由于文档中可能包含有不同类型的信息,所以定义了几种不同类型的节点。DOM中最常见的节点类型有:
             * (1)元素: 元素是XML的基本构件。元素的子节点可以是其它元素、文本节点或两者都有。元素节点还可以只含有属性这一唯一类型的节点。
             * (2)属性:属性节点包含关于元素节点的信息,但它不是元素的子节点 (3)文本:文本节点文本信息,或干脆是空白的文本。
             * (4)文档:文档节点是整个文档中所有其它节点的父节点 元素是一种很重要的类型节点,元素节点可以是其他节点的容器。
             */
            // 得到DOM解析器的工厂实例
            DocumentBuilderFactory domfac = DocumentBuilderFactory
                    .newInstance();
            // 从DOM工厂获得DOM解析器
            DocumentBuilder dombuilder = domfac.newDocumentBuilder();
            // 把要解析的XML文档转化为输入流,以便DOM解析器解析它
            InputStream is = new FileInputStream("bin/java.xml");
            // 解析XML文档的输入流,得到一个Document
            Document doc = dombuilder.parse(is);
            // 得到XML文档的根节点(books)
            Element root = doc.getDocumentElement();
            // 获得根节点的所有属性名和值
            if (0  root.getAttributes().getLength()) {
                System.out.println("根节点属性信息..........");
                for (int a = 0; a  root.getAttributes().getLength(); a++) {
                    System.out.println(root.getAttributes().item(a)
                            .getNodeName()
                            + ":" + root.getAttributes().item(a).getNodeName());
                }
            }
            // 得到根节点的子节点
            NodeList books = root.getChildNodes();
            for (int i = 0; i  books.getLength(); i++) {
                Node book = books.item(i);
                // 判断是不是子节点
                if (book.getNodeType() == Node.ELEMENT_NODE) {
                    // 获得子节点的所有属性名和值
                    if (0  book.getAttributes().getLength()) {
                        System.out.println("第" + i + "个子节点属性信息..........");
                        for (int b = 0; b  book.getAttributes().getLength(); b++) {
                            System.out.println(book.getAttributes().item(b)
                                    .getNodeName()
                                    + ":"
                                    + book.getAttributes().item(b)
                                            .getNodeValue());
                        }
                    }
                    //获得子节点的子节点
                    for (int j = 0; j  book.getChildNodes().getLength(); j++) {
                        Node book1 = book.getChildNodes().item(j);
                        //System.out.println(book.getChildNodes().item(j));
                        // 判断是不是子节点
                        if (book1.getNodeType()==Node.ELEMENT_NODE) {
                            // 获得子节点的所有属性名和值
                            if (0  book1.getAttributes().getLength()) {
                                System.out.println(" 第" + i + "个子节点的第" + j
                                        + "子节点的属性信息..........");
                                for (int b1 = 0; b1  book1.getAttributes()
                                        .getLength(); b1++) {
                                    System.out.println(book1.getAttributes()
                                            .item(b1).getNodeName()
                                            + ":"
                                            + book1.getAttributes().item(b1)
                                                    .getNodeValue());
                                }
                            }
                            System.out.println(book1.getNodeName()+":"+book1.getFirstChild().getNodeValue());
                        }                        
                    }
                }               
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
还有一种解析xml文件的方式:
http://blog.chinaunix.net/u2/76927/showart_1813187.html



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/76927/showart_1970248.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP