Java如何使用JDOM解析XML呢?

java-教程王 Java教程 发布时间:2021-12-06 09:41:25 阅读数:16962 1
下文笔者讲述使用JDOM解析XML的方法分享,如下所示:

JDOM简介

JDOM是一个开源项目
它基于树形结构
使用Java代码对XML文档实现解析、生成、序列化及多种操作
 JDOM与DOM非常类似
它是处理XML的纯JAVA API
 API大量使用了Collections类,且JDOM仅使用具体类而不使用接口
JDOM 它自身不包含解析器。它通常使用 SAX2 解析器来解析和验证输入 XML 文档 

JDOM定义

JDOM中JAXP是用于XML语法分析的Java API,包含以下包信息:
  1. org.w3c.dom W3C推荐的用于XML标准文档对象模型的Java工具。
  2. org.xml.sax 用于对XML进行语法分析的事件驱动的简单API。
  3. javax.xml.parsers 工厂化工具,允许应用程序开发人员获得并配置特殊的语法分析器工具,JDOM能够替换

JDOM解析xml步骤

1.建立解析器
SAXBuilder sb=new SAXBuilder();
//返回Document文档
Document doc=sb.build(new FileInputStream(XmlFname));
2. DOM处理
元素基于Content类.Element类操作同Dom.详见Java XML解析 - 利用dom(org.w3c.dom)解析XML 
3. DOM结果处理(输出/保存)
Format fo=Format.getCompactFormat();//取得输出格式Format
//fo.setEncoding("GB2312");
XMLOutputter outputter=new XMLOutputter(fo);
FileWriter write=new FileWriter(XmlFname);//这里可以是PrintWriter形式的(任何Writer流).
outputter.output(doc,write/*Writer流,见构造函数*/);
write.close();
例:
JDOM解析xml例子
//xml文件
<?xml version="1.0" encoding="UTF-8"?>        
<AirPortLine>        
    <line lid="MU2480" num="3">        
        <id>1</id>        
        <station>        
            <sid>1</sid>        
            <sname>武汉</sname>        
        </station>        
        <station>        
            <sid>2</sid>        
            <sname>石家庄</sname>        
        </station>        
        <station>        
            <sid>3</sid>        
            <sname>北京</sname>        
        </station>        
    </line>        
    <line lid="MU2483" num="4">        
        <id>2</id>        
        <station>        
            <sid>1</sid>        
            <sname>重庆</sname>        
        </station>        
        <station>        
            <sid>2</sid>        
            <sname>武汉</sname>        
        </station>        
        <station>        
            <sid>3</sid>        
            <sname>上海</sname>        
        </station>        
        <station>        
            <sid>4</sid>        
            <sname>东京</sname>        
        </station>        
    </line>        
    <line lid="MU2485" num="2">        
        <id>3</id>        
        <station>        
            <sid>1</sid>        
            <sname>上海</sname>        
        </station>        
        <station>        
            <sid>2</sid>        
            <sname>纽约</sname>        
        </station>        
    </line>        
</AirPortLine>
//解析XML testJDOM.java
public class testJDOM {  
    public static void main(String[] args) {  
        try {  
            File file = new File("AirPortLine.xml");  
            SAXBuilder builder = new SAXBuilder();  
            Document doc = builder.build(file);  
  
            parseJDOM(doc);// 解析XML文档  
  
        } catch (Exception e) {  
            System.out.println("Can't read the file");  
        }  
    }  
  
    // 解析XML文档  
    private static void parseJDOM(Document doc) {  
        Element root = doc.getRootElement();  
        list lineList = root.getChildren("line");// 也可使用root.getChildren()  
        for (Iterator iter = lineList.iterator(); iter.hasNext();) {  
            Element lineElement = (Element) iter.next();// 获取<line>元素  
  
            String lid = lineElement.getAttributeValue("lid");// 获取<line>元素的lid属性值  
            String num = lineElement.getAttributeValue("num");// 获取<line>元素的num属性值  
  
            System.out.println("==lid:" + lid);  
            System.out.println("==num:" + num);  
  
            Element idElement = lineElement.getChild("id");// 获得<line>下<id>标签下的子元素  
            String id = idElement.getText();// // 获得<line>下<id>标签下的子元素值  
            System.out.println("==路线id:" + id);  
  
            List stationList = lineElement.getChildren("station");// 获得<line>下<station>列表  
            for (Iterator subIter = stationList.iterator(); subIter.hasNext();) {  
                Element stationElement = (Element) subIter.next();// 获取<station>元素  
  
                Element sidElement = stationElement.getChild("sid");// 获得<station>下<sid>标签下的子元素  
                Element snameElement = stationElement.getChild("sname");// 获得<station>下<sname>标签下的子元素  
                String sid = sidElement.getText();// 获得<station>下<sid>标签下的子元素值  
                String sname = snameElement.getText();// 获得<station>下<sname>标签下的子元素值  
  
                System.out.println("==路线sid:" + sid);  
                System.out.println("==路线sname:" + sname);  
            }  
        }  
    }  
}  
JDOM注意事项: 
  JDOM对象中,XML元素就是Element的实例
   XML属性就是Attribute的实例
   XML文档本身就是Document的实例
-------------------------------------------------------------
JDOM对象就是像Document、Element和Attribute这些类的直接实例
  创建JDOM对象,直接使用new操作符即可 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202112/1995.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者