首页 JDOM方法 解析XML

JDOM方法 解析XML

举报
开通vip

JDOM方法 解析XMLJDOM 不光可以很方便的建立XML文档,它的另一个用处是它能够读取并操作现有的 XML 数据。 JDOM的解析器在org.jdom.input.*这个包里,其中的DOMBuilder的功能是将DOM模型的Document解析成JDOM模型的Document;SAXBuilder的功能是从文件或流中解析出符合JDOM模型的XML 树。由于我们经常要从一个文件里读取数据,因此我们应该采用后者作为解析工具。 解析一个xml文档,基本可以看成以下几个步骤: 1.实例化一个合适的解析器对象 本例中我们使用SAXBu...

JDOM方法 解析XML
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(); } } } JDOM是由以下几个包组成的 org.jdom包含了所有的xml文档要素的java类 org.jdom.adapters包含了与dom适配的java类 org.jdom.filter包含了xml文档的过滤器类 org.jdom.input包含了读取xml文档的类 org.jdom.output包含了写入xml文档的类 org.jdom.transform包含了将jdomxml文档接口转换为其他xml文档接口 org.jdom.xpath包含了对xml文档xpath操作的类 JDOM类说明 1、org.JDOM这个包里的类是你解析xml文件后所要用到的所有数据类型。 Attribute CDATA Coment DocType Document Element EntityRef Namespace ProscessingInstruction Text 2、org.JDOM.transform在涉及xslt格式转换时应使用下面的2个类 JDOMSource JDOMResult org.JDOM.input 3、输入类,一般用于文档的创建工作 SAXBuilder DOMBuilder ResultSetBuilder 4、org.JDOM.output输出类,用于文档转换输出 XMLOutputter SAXOutputter DomOutputter JTreeOutputter 使用前注意事项: 1.JDOM对于JAXP以及TRax的支持 JDOM支持JAXP1.1:你可以在程序中使用任何的parser工具类,默认情况下是 JAXP的parser。 制定特别的parser可用如下形式 SAXBuilderparser =newSAXBuilder("org.apache.crimson.parser.XMLReaderImpl"); Documentdoc=parser.build("http://www.cafeconleche.org/"); //workwiththedocument... JDOM也支持TRaX:XSLT可通过JDOMSource以及JDOMResult类来转换(参见以后章节) 2.注意在JDOM里文档(Document)类由org.JDOM.Document来 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示。这要与org.w3c.dom中的Document区别开,这2种格式如何转换在后面会说明。 以下如无特指均指JDOM里的Document。 1.Ducument类 (1)Document的操作方法: Element root=new Element("GREETING"); Document doc=new Document(root); root.setText("HelloJDOM!"); 或者简单的使用Document doc=new Document(new Element("GREETING").setText("HelloJDOM!t")); 这点和DOM不同。Dom则需要更为复杂的代码,如下: DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Documentdoc=builder.newDocument(); Element root=doc.createElement("root"); Text text=doc.createText("Thisistheroot"); root.appendChild(text); doc.appendChild(root); 注意事项:JDOM不允许同一个节点同时被2个或多个文档相关联,要在第2个文档中使用原来老文档中的节点的话。首先需要使用detach()把这个节点分开来。 (2)从文件、流、系统ID、URL得到Document对象: DOMBuilder builder=new DOMBuilder(); Document doc=builder.build(newFile("jdom_test.xml")); SAXBuilder builder=new SAXBuilder(); Document doc=builder.build(url); 在新版本中DOMBuilder已经Deprecated掉 DOMBuilder.builder(url),用SAX效率会比较快。 这里举一个小例子,为了简单起见,使用String对象直接作为xml数据源: Public jdom Test(){ String textXml=null; textXml=""; textXml=textXml+ "aaabbbcccddd"; textXml=textXml+""; SAXBuilder builder=new SAXBuilder(); Document doc=null; Reader in=new StringReader(textXml); try{ doc=builder.build(in); Element root=doc.getRootElement(); List ls=root.getChildren();//注意此处取出的是root节点下面的一层的Element集合 for(Iteratoriter=ls.iterator();iter.hasNext();){ Element el=(Element)iter.next(); if(el.getName().equals("to")){ System.out.println(el.getText()); } } } catch(IOExceptionex){ ex.printStackTrace(); } catch(JDOMExceptionex){ ex.printStackTrace(); } } (3)DOM的document和JDOM的Document之间的相互转换使用方法,简单! DOMBuilder builder=new DOMBuilder(); org.jdom.Document jdomDocument=builder.build(domDocument); DOMOutputter converter=newDOMOutputter();//workwiththeJDOMdocument… org.w3c.dom.Document domDocument=converter.output(jdomDocument); //workwiththeDOMdocument… 2.XML文档输出 XMLOutPutter类: JDOM的输出非常灵活,支持很多种io格式以及风格的输出 Document doc=newDocument(...); XMLOutputter outp=newXMLOutputter(); outp.output(doc,fileOutputStream);//Rawoutput outp.setTextTrim(true);//Compressedoutput outp.output(doc,socket.getOutputStream()); outp.setIndent("");//Prettyoutput outp.setNewlines(true); outp.output(doc,System.out); 详细请参阅最新的JDOMAPI手册 3.Element类: (1)浏览Element树 Element root=doc.getRootElement();//获得根元素element List allChildren=root.getChildren();//获得所有子元素的一个list List namedChildren=root.getChildren("name");//获得指定名称子元素的list Element child=root.getChild("name");//获得指定名称的第一个子元素 JDOM给了我们很多很灵活的使用方法来管理子元素(这里的List是 java.util.List) List allChildren=root.getChildren(); allChildren.remove(3);//删除第四个子元素 allChildren.removeAll(root.getChildren("jack"));//删除叫“jack”的子元素 root.removeChildren("jack");//便捷写法 allChildren.add(newElement("jane"));//加入 root.addContent(newElement("jane"));//便捷写法 allChildren.add(0,newElement("first")); (2)移动Elements: 在JDOM里很简单 Element movable=newElement("movable"); parent1.addContent(movable);//place parent1.removeContent(movable);//remove parent2.addContent(movable);//add 在Dom里 Element movable=doc1.createElement("movable"); parent1.appendChild(movable);//place parent1.removeChild(movable);//remove parent2.appendChild(movable);//出错! 补充:纠错性 JDOM的Element构造函数(以及它的其他函数)会检查element是否合法。 而它的add/remove方法会检查树结构,检查内容如下: 1.在任何树中是否有回环节点 2.是否只有一个根节点 3.是否有一致的命名空间(Namespaces) (3)Element的text内容读取 Acooldemo //Thetextisdirectlyavailable //Returns"\nAcooldemo\n" String desc=element.getText(); //There'saconvenientshortcut //Returns"Acooldemo" String desc=element.getTextTrim(); (4)Elment内容修改 element.setText("Anewdescription"); 3.可正确解释特殊字符 element.setText("
本文档为【JDOM方法 解析XML】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_718425
暂无简介~
格式:doc
大小:31KB
软件:Word
页数:0
分类:互联网
上传时间:2013-05-16
浏览量:28