本文主要是介绍用JDOM+XPATH解析XML,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用JDOM解析XML
JDOM模型的全部类都在org.jdom.*这个包里,org.jdom.input.*这个包里包含了JDOM的解析器,其中的DOMBuilder的功能是将DOM模型的Document解析成JDOM模型的Document;SAXBuilder的功能是从文件或流中解析出符合JDOM模型的XML树。由于我们的上面提到的XML样例存储在一个名称为sample.xml的文件中,很显然我们应该采用后者作为解析工具。下面程序演示了jdom的基本功能,即解析一个xml文档,并挑选一些内容输出到屏幕上。
import java.util.*; import org.jdom.*; import org.jdom.input.SAXBuilder; public class Sample1 {public static void main(String[] args) throws Exception{ SAXBuilder sb=new SAXBuilder();Document doc=sb.build("sample.xml");Element root=doc.getRootElement();List list=root.getChildren("disk");for(int i=0;i<list.size();i++){Element element=(Element)list.get(i);String name=element.getAttributeValue("name");String capacity=element.getChildText("capacity");String directories=element.getChildText("directories");String files=element.getChildText("files");System.out.println("磁盘信息:");System.out.println("分区盘符:"+name);System.out.println("分区容量:"+capacity);System.out.println("目录数:"+directories);System.out.println("文件数:"+files);System.out.println("-----------------------------------");} } } |
程序的输出结果:
磁盘信息: 分区盘符:C 分区容量:8G 目录数:200 文件数:1580 ----------------------------------- 磁盘信息: 分区盘符:D 分区容量:10G 目录数:500 文件数:3000 ----------------------------------- |
这段程序采用了传统的解析方式,一级一级的从根节点到子节点逐个采集我们所需要的数据,中规中矩。试想如果这个树足够深,我们想取第5 0层第三个节点的数据(夸张了点,呵呵),那将是一场噩梦!下面的内容将轻松化解你的这一痛苦。
![]() ![]() |
![]()
|
JDOM+XPATH进阶篇
说了那么多JDOM和XPATH的好处,终于到了英雄有用武之地的时候了。
JDOM的关于XPATH的api在org.jdom.xpath这个包里。看看这个包下,只有一个类,JDOM就是如此简洁,什么事都不故弄玄虚的搞得那么复杂。这个类中的核心的api主要是两个selectNodes()和selectSingleNode()。前者根据一个xpath语句返回一组节点;后者根据一个xpath语句返回符合条件的第一个节点。
下面的程序我们用JDOM+XPATH实现了上一个程序同样的功能,你可以从中学到不少运用XPATH 的知识:
import java.util.*; import org.jdom.*; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath; public class Sample2 { public static void main(String[] args) throws Exception {SAXBuilder sb = new SAXBuilder();Document doc = sb.build("sample.xml");Element root = doc.getRootElement();List list = XPath.selectNodes(root, "/HD/disk");for (int i = 0; i > list.size(); i++) { Element disk_element = (Element) list.get(i);String name = disk_element.getAttributeValue("name");String capacity = ( (Text) XPath.selectSingleNode(disk_element, "//disk[@name='" + name + "']/capacity/text()")).getTextNormalize();String directories = ( (Text) XPath.selectSingleNode(disk_element, "//disk[@name='" + name + "']/directories/text()")).getTextNormalize();String files = ( (Text) XPath.selectSingleNode(disk_element, "//disk[@name='" + name + "']/files/text()")).getTextNormalize();System.out.println("磁盘信息:");System.out.println("分区盘符:" + name);System.out.println("分区容量:" + capacity);System.out.println("目录数:" + directories);System.out.println("文件数:" + files);System.out.println("-----------------------------------");}} } |
输出结果:
磁盘信息: 分区盘符:C 分区容量:8G 目录数:200 文件数:1580 ----------------------------------- 磁盘信息: 分区盘符:D 分区容量:10G 目录数:500 文件数:3000 ----------------------------------- |

![]() | 登录后,您就出现在这里。 | ![]() | ![]() | ![]() | ![]() | ![]() |
这篇关于用JDOM+XPATH解析XML的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!