JDOM解析XML文档

命名难 (NameFail)
• 阅读 171

JDOM不光可以很方便的建立XML文档,它的另一个用处是它能够读取并操作现有的 XML 数据。
JDOM的解析器在org.jdom.input.*这个包里,其中的DOMBuilder的功能是将DOM模型的Document解析成JDOM模型的Document;SAXBuilder的功能是从文件或流中解析出符合JDOM模型的XML 树。由于我们经常要从一个文件里读取数据,因此我们应该采用后者作为解析工具。
解析一个xml文档,基本可以看成以下几个步骤:
1.实例化一个合适的解析器对象
本例中我们使用SAXBuilder:
SAXBuilder sb = new SAXBuilder();
2.以包含XML数据的文件为参数,构建一个文档对象myDocument
Document myDocument = sb.build(/some/directory/myFile.xml);
3.获到根元素
Element rootElement = myDocument.getRootElement();
一旦你获取了根元素,你就可以很方便地对它下面的子元素进行操作了,下面对Element对象的一些常用方法作一下简单说明:
getChild("childname") 返回指定名字的子节点,如果同一级有多个同名子节点,则只返回第一个;如果没有返回null值。
getChildren("childname") 返回指定名字的子节点List集合。这样你就可以遍历所有的同一级同名子节点。
getAttributeValue("name") 返回指定属性名字的值。如果没有该属性则返回null,有该属性但是值为空,则返回空字符串。
getChildText("childname") 返回指定子节点的内容文本值。
getText() 返回该元素的内容文本值。
还有其他没有罗列出来的方法,如果需要的话,可以随时查阅JDOM的在线文档:http://www.jdom.org/docs/apidocs/index.html。当然你可以在你需要的地方添加、删除元素操作,还记得上面的创建XML的方法吗?呵呵~~~
学习新东东还是从实例学起最为快捷,下面简单举个例子,就以上面的XML样本代码来学习 JDOM的XML解析。本例中读取了样本XML文件里一些属性和content,最后我们还在contact元素里插入了一个新元素wanghua@cyberobject.com" />。尽管我们实现了对于XML的基本操作,细心的朋友可能会
有疑问:如果XML文档的层次稍微复杂一些,如果嵌套多达几十上百层的话(开个玩笑),如果靠这样从根元素一级一级地通过getChild("childname")来访问子元素的话,将会非常痛苦!是的,的确是这样,但是我们有另一个有力的工具 XPath,为什么不用呢?这是后话!先卖个关子(手敲累啦,下回吧,呵呵)。
/*
* Created on 2004-8-21
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.cyberobject.study;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
/**
* @author kingwong
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TestJDOM2 {
public static void main(String[] args){
SAXBuilder sb = new SAXBuilder();
try
{
Document doc = sb.build("myFile.xml");
Element root = doc.getRootElement();
String str1 = root.getAttributeValue("comment");
System.out.println("Root Element's comment attribute is : " + str1);
String str2 = root.getChild("sex").getAttributeValue("value");
System.out.println("sex Element's value attribute is : " + str2);
String str3 = root.getChildText("name");
System.out.println("name Element's content is :" + str3);
String str4 = root.getChild("contact").getChildText("telephone");
System.out.println("contact Element's telephone subelement content is : " + str4 + "\n");
Element inputElement = root.getChild("contact");
inputElement.addContent(new Element("email").setAttribute("value","wanghua@cyberobject.com"));
XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());
String outStr = xmlOut.outputString(root);
System.out.println(outStr);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
DOM解析XML案例Demo(一)
一、Java中操作DOM中常用的类Node 数据类型基类Element 最常用的类Attr Element的属性Text ElementorAttr的内容Document 代表整个XML文档,代表DOMtree
Stella981 Stella981
3年前
Android开发之使用pull解析XML文件
Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的。Pull解析器的运行方式与SAX解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是,Pull解析器产生的事
Stella981 Stella981
3年前
Android开发之使用Pull解析器生成XML文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOMAPI生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。相关代码如下:publicstaticStringwriteXML(List<Pe
Stella981 Stella981
3年前
Android xml (sax)
1、什么事SAXSAX,全程是SimpleApiforXLM,即是指一种接口,也是指一个软件包。作为接口,SAX是事件驱动型XML解析的一个标准接口2、SAX基本原理3、SAX常用接口4、SAX解析SAX的原理SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、yuansu(eleme
Wesley13 Wesley13
3年前
3. XML实体注入漏洞的利用与学习
XML实体注入漏洞的利用与学习前言XXEInjection即XMLExternalEntityInjection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进行处理时引发的安全问题.在XML1.0标准里,XML文档结构里定义了实体(entity)这个概念.实体可以通过预定义在文档中
Stella981 Stella981
3年前
Android小白的探索:2D绘图之Android简易版Microsoft Visio学习之路 二、 自定义xml生成与解析
  今天天分享下如何通过组合模式,在sd卡中,写一个xml文件来保存这个组合类,及如何读取,解析自定义的xml文件,没有使用w3c组织所推荐的任何一种接口,自己实现对自定义xml文件的解析,因为能力不够,所以实现下基本原理,加深对xml文件解析原理的理解。  上一篇博客我发现都没写出来我对组合模式的理解,很尴尬,文笔不好呢。  先简略说
Wesley13 Wesley13
3年前
JavaEE之servlet相关技术
相关技术:为了灵活实现的不同路径(/hello)执行不同的资源(HeIIoMyServlet)我们需要使用XML进行配置;为了限定XML内容,我们需要使用xml约束(DTD或schema);为了获得xml的内容,我们需要使用dom4j进行解析。XML:XML称为ExtensibleMarkupLanguage,意思是可扩展的标记语言。XML语法上和
小万哥 小万哥
1年前
深入学习 XML 解析器及 DOM 操作技术
所有主要的浏览器都内置了一个XML解析器,用于访问和操作XMLXML解析器在访问XML文档之前,必须将其加载到XMLDOM对象中所有现代浏览器都有一个内置的XML解析器,可以将文本转换为XMLDOM对象解析文本字符串以下示例将一个文本字符串解析为XMLDO
小万哥 小万哥
1年前
DOM(文档对象模型):理解网页结构与内容操作的关键技术
DOM(文档对象模型)定义了一种访问和操作文档的标准。它是一个平台和语言无关的接口,允许程序和脚本动态访问和更新文档的内容、结构和样式。HTMLDOM用于操作HTML文档,而XMLDOM用于操作XML文档。HTMLDOM示例通过ID获取并修改HTML元素的
小万哥 小万哥
1年前
学习 XSLT:XML文档转换的关键
XSL(eXtensibleStylesheetLanguage)是一种用于XML的样式语言。XSL(T)语言XSLT是一种用于转换XML文档的语言。XPath是一种用于在XML文档中导航的语言。XQuery是一种用于查询XML文档的语言。它始于XSLXS
小白学大数据 小白学大数据
3个月前
Kanna 与 Swift:结合使用提升网络请求效率
Kanna是一个基于Swift的轻量级、高性能的XML/HTML解析库,它能够帮助开发者快速解析和处理网络返回的HTML或XML数据。通过结合Kanna和Swift的网络请求功能,我们可以构建更加高效、灵活的网络交互模块。本文将详细介绍如何在Swift中使