org.w3c.dom(java dom)解析XML文档

合集下载

webservice返回的xml格式

webservice返回的xml格式

webservice返回的xml格式WebService是一种基于Web的服务,通过网络进行通信和交互。

它使用XML(可扩展标记语言)作为数据交换的格式,以实现不同平台和应用程序之间的数据传输和共享。

本文将介绍WebService返回的XML格式及其相关内容。

一、XML格式简介XML是一种用于描述、存储和传输数据的标记语言。

它使用标签来标识数据的结构和含义,使得数据可以被解析和理解。

XML格式具有以下特点:1. 可扩展性:可以根据需要定义自己的标签和结构。

2. 可读性:使用人类可读的文本格式,易于理解和编辑。

3. 平台无关性:可以在不同的操作系统和应用程序之间进行数据交换。

4. 自描述性:标签和属性可以描述数据的结构和含义。

二、WebService返回的XML格式WebService通常使用XML格式来返回数据。

返回的XML格式可以根据具体的业务需求和数据结构进行定义。

以下是一个示例:```xml<response><status>success</status><message>请求成功</message><data><user><id>123</id><name>John</name><age>25</age></user><user><id>456</id><name>Jane</name><age>30</age></user></data></response>```在上述示例中,XML根元素为`<response>`,包含了三个子元素:`<status>`、`<message>`和`<data>`。

java document详解

java document详解

在JAVA中使用文档对象模型DOM经验小结文档对象模型(DOM) 是一个文档标准,对于完备的文档和复杂的应用程序,DOM 提供了大量灵活性。

DOM标准是标准的。

它很强壮且完整,并且有许多实现。

这是许多大型安装的决定因素--特别是对产品应用程序,以避免在API发生改变时进行大量的改写。

以上是我在选择处理XML数据时之所以没有选择JDOM或者dom4j等其它面向对象的标准的原因,不过也由于DOM从一开始就是一种与语言无关的模型,而且它更趋向用于像C或Perl这类语言,没有利用Java的面向对象的性能,所以在使用的过程中也遇到了不少的麻烦,今天这里做一个小结。

另外,我目前使用XML主要是作为数据传输的统一格式,并统一用户界面展示的接口,应用的面并不是很广,所以使用到的DOM的内容其实不多。

在准备使用它的时候,是做了充足的准备的,也有遇到困难的准备,所以一开始就有了一个简单的工具类来封装DOM对象使用时必要的公共方法,实际证明这样做是很明智的,一个简单的创建Document 对象的操作,要是每次都需要写上5行以上代码,并且还要处理那些烦人的Exception,实在是会打击大家的积极性,所以在最初,做了一个XMLTool类,专门封装了如下的公共方法:1、 Document对象创建(包括空的Document对象创建,以一个给定Node节点作为根节点创建。

2、将一个规范的XML字符串转换成一个Document对象。

3、从物理硬盘读取一个XML文件并返回一个Document对象。

4、将一个Node对象转换成字符串。

其中每个方法都截获相关的DOM操作所抛出的异常,转换成一个RuntimeException抛出,这些异常在实际使用过程中,一般状况下其实都不会抛出,特别是象生成一个Document对象时的ParserConfigurationException、转换Node节点成字符串时要生成一个Transformer对象时的TransformerConfigurationException等等,没有必要在它们身上花时间精力。

JavaXML解析的四种方法(连载)

JavaXML解析的四种方法(连载)

JavaXML解析的四种⽅法(连载)1. xml简介 XML:指可扩展标记语⾔, Extensible Markup Language;类似HTML。

XML的设计宗旨是传输数据,⽽⾮显⽰数据。

⼀个xml⽂档实例:1 <?xml version="1.0" encoding="UTF-8"?>2 <company name="Tencent" address="深圳市南⼭区">3 <department deptNo="001" name="development">4 <employee id="devHead" position="minister">许刚</employee>5 <employee position="developer">⼯程师A</employee>6 </department>7 <department deptNo="002" name="education">8 <employee position="minister" telephone="1234567">申林</employee>9 <employee position="trainee">实习⽣A</employee>10 </department>11 </company> 第⼀⾏是 XML 声明。

它定义 XML 的版本 (1.0) 和所使⽤的编码. 下⼀⾏描述⽂档的根元素:<company>开始,该根元素具有2个属性“name”,"address"。

java使用document解析xml文件

java使用document解析xml文件

java使⽤document解析xml⽂件准备⼯作:1创建java⼯程2创建xml⽂档。

完成后看下⾯代码:import org.w3c.dom.*;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;public class Main {public static void main(String[] args) throws Exception {//创建⼀个⽂档解析器⼯⼚DocumentBuilderFactory fac= DocumentBuilderFactory.newInstance();//⽤上⾯的⼯⼚创建⼀个⽂档解析器DocumentBuilder builder=fac.newDocumentBuilder();//⽤上⾯的⽂档解析器解析⼀个⽂件放到document对象⾥Document doc=builder.parse("src/server.xml");//获取⽂档中节点名称为Listener的所有节点,并返回⼀个节点集合NodeList listenerList=doc.getElementsByTagName("Listener");System.out.println("⼀共有"+listenerList.getLength()+"个节点");//遍历整个集合(把所有标签名为Listener的节点⼀个⼀个拿出来for (int i=0;i<listenerList.getLength();i++){System.out.println("===========这是第"+(i+1)+"个listener节点的开始:===========");//把集合⾥的每⼀个listener节点分别拿出来Node node=listenerList.item(i);//再把上⼀个节点中的所有属性拿出来NamedNodeMap nodeMap= node.getAttributes();System.out.println("第"+(i+1)+"个节点⼀共有"+nodeMap.getLength()+"个属性");//遍历所有属性for(int j=0;j<nodeMap.getLength();j++){Node node1=nodeMap.item(j);System.out.println("第"+(j+1)+"个属性的名称是"+node1.getNodeName());System.out.println("第"+(j+1)+"个属性的值是"+node1.getNodeValue());}//获取节点的所有⼦节点,注意会把所有换⾏符也解析为⼦节点NodeList childNode=node.getChildNodes();//遍历所有⼦节点for(int k=0;k<childNode.getLength();k++){if(childNode.item(k).getNodeType()==Node.ELEMENT_NODE){//这个过滤条件是只将标签节点保留(换⾏符的节点就删去)}System.out.println("===========这是第"+(i+1)+"个节点的结束:===========");}}}为了⽅便记忆,在这⾥拆解⼀下。

xml特殊字符转义方法

xml特殊字符转义方法

xml特殊字符转义方法XML的特殊字符转义可以通过以下几种方式实现:1. 使用XML解析器内置的特殊字符转义函数,例如""表示换行符,"t"表示制表符,""表示换行符等等。

2. 使用Java中的DOM解析器或SAX解析器,通过API提供的DOM 或SAX解析器对象来获取XML文档,并使用文档对象模型(DOM)或事件模型(SAX)的特殊字符转义函数。

3. 使用第三方XML解析库,例如Java中的ElementTree、EclipseXML和SWIXML等,这些库提供了更加灵活和丰富的API,可以轻松地实现XML的特殊字符转义。

下面是一个使用Java中的DOM解析器实现XML特殊字符转义的示例代码:```javaimport java.io.IOException;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.List;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.私营企业协会.私营企业协会Document;import org.w3c.dom.私营企业协会.私营企业协会Node;public class 私营企业协会 extends Node {public 私营企业协会Node() {super(私营企业协会Document.createDocument());String name = getNodeName();appendContentChild("协会名称", name);}public String getName() {return getNodeName().getValue();}public void setName(String name) {setNodeName(name);}public List<私营企业协会Node> getEmployees() {List<私营企业协会Node> employees = new ArrayList<>(); Node employeeNode = getFirstChild("雇员");while (employeeNode != null) {私营企业协会Node employee = (私营企业协会Node) employeeNode.那只读Subtree();employees.add(employee);employeeNode = employeeNode.那只读Subtree();}return employees;}public void appendContentToNode(String content) throws IOException {Document doc = getDOM();Element element = doc.createElement("协会");element.appendChild(appendContentToNode(content));getFirstChild("雇员").appendChild(element);}}```在这个示例代码中,我们使用了DOM解析器来获取私营企业协会的文档,并使用Node对象的get Employees()方法来获取协会的所有雇员,最后将雇员的内容添加到协会的文档中。

org.w3c.dom(javadom)解析XML文档

org.w3c.dom(javadom)解析XML文档

org.w3c.dom(javadom)解析XML⽂档位于org.w3c.dom操作XML会⽐较简单,就是将XML看做是⼀颗树,DOM就是对这颗树的⼀个数据结构的描述,但对⼤型XML⽂件效果可能会不理想⾸先来了解点Java DOM 的 API:1.解析器⼯⼚类:DocumentBuilderFactory创建的⽅法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();2.解析器:DocumentBuilder创建⽅法:通过解析器⼯⼚类来获得 DocumentBuilder db = dbf.newDocumentBuilder();3.⽂档树模型Document创建⽅法:a.通过xml⽂档 Document doc = db.parse("bean.xml"); b.将需要解析的xml⽂档转化为输⼊流 InputStream is = new FileInputStream("bean.xml");Document doc = db.parse(is);Document对象代表了⼀个XML⽂档的模型树,所有的其他Node都以⼀定的顺序包含在Document对象之内,排列成⼀个树状结构,以后对XML⽂档的所有操作都与解析器⽆关,直接在这个Document对象上进⾏操作即可;包含的⽅法:4.节点列表类NodeListNodeList代表了⼀个包含⼀个或者多个Node的列表,根据操作可以将其简化的看做为数组5.节点类NodeNode对象是DOM中最基本的对象,代表了⽂档树中的抽象节点。

但在实际使⽤中很少会直接使⽤Node对象,⽽是使⽤Node对象的⼦对象Element,Attr,Text等6.元素类Element是Node类最主要的⼦对象,在元素中可以包含属性,因⽽Element中有存取其属性的⽅法7.属性类Attr代表某个元素的属性,虽然Attr继承⾃Node接⼝,但因为Attr是包含在Element中的,但并不能将其看做是Element的⼦对象,因为Attr并不是DOM树的⼀部分基本的知识就到此结束,更加具体的⼤家可以参阅JDK API⽂档实战:1.使⽤DOM来遍历XML⽂档中的全部内容并且插⼊元素:school.xml⽂档:<?xml version = "1.0" encoding = "utf-8"?><School><Student><Name>沈浪</Name><Num>1006010022</Num><Classes>信管2</Classes><Address>浙江杭州3</Address><Tel>123456</Tel></Student><Student><Name>沈1</Name><Num>1006010033</Num><Classes>信管1</Classes><Address>浙江杭州4</Address><Tel>234567</Tel></Student><Student><Name>沈2</Name><Num>1006010044</Num><Classes>⽣⼯2</Classes><Address>浙江杭州1</Address><Tel>345678</Tel></Student><Student><Name>沈3</Name><Num>1006010055</Num><Classes>电⼦2</Classes><Address>浙江杭州2</Address><Tel>456789</Tel></Student></School>DomDemo.java1 package xidian.sl.dom;2import java.io.FileOutputStream;34import javax.xml.parsers.DocumentBuilder;5import javax.xml.parsers.DocumentBuilderFactory;67import org.apache.crimson.tree.XmlDocument;8import org.w3c.dom.Document;9import org.w3c.dom.Element;10import org.w3c.dom.NodeList;111213public class DomDemo {14/**15 * 遍历xml⽂档16 * */17public static void queryXml(){18try{19//得到DOM解析器的⼯⼚实例20 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();21//从DOM⼯⼚中获得DOM解析器22 DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();23//把要解析的xml⽂档读⼊DOM解析器24 Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");25 System.out.println("处理该⽂档的DomImplementation对象 = "+ doc.getImplementation());26//得到⽂档名称为Student的元素的节点列表27 NodeList nList = doc.getElementsByTagName("Student");28//遍历该集合,显⽰结合中的元素及其⼦元素的名字29for(int i = 0; i< nList.getLength() ; i ++){30 Element node = (Element)nList.item(i);31 System.out.println("Name: "+ node.getElementsByTagName("Name").item(0).getFirstChild().getNodeValue());32 System.out.println("Num: "+ node.getElementsByTagName("Num").item(0).getFirstChild().getNodeValue());33 System.out.println("Classes: "+ node.getElementsByTagName("Classes").item(0).getFirstChild().getNodeValue());34 System.out.println("Address: "+ node.getElementsByTagName("Address").item(0).getFirstChild().getNodeValue());35 System.out.println("Tel: "+ node.getElementsByTagName("Tel").item(0).getFirstChild().getNodeValue());36 }3738 }catch (Exception e) {39// TODO: handle exception40 e.printStackTrace();41 }42 }43/**44 * 向已存在的xml⽂件中插⼊元素45 * */46public static void insertXml(){47 Element school = null;48 Element student = null;49 Element name = null;50 Element num = null;51 Element classes = null;52 Element address = null;53 Element tel = null;54try{55//得到DOM解析器的⼯⼚实例56 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();57//从DOM⼯⼚中获得DOM解析器58 DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();59//把要解析的xml⽂档读⼊DOM解析器60 Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");61//得到⽂档名称为Student的元素的节点列表62 NodeList nList = doc.getElementsByTagName("School");63 school = (Element)nList.item(0);64//创建名称为Student的元素65 student = doc.createElement("Student");66//设置元素Student的属性值为23167 student.setAttribute("examId", "23");68//创建名称为Name的元素69 name = doc.createElement("Name");70//创建名称为⾹⾹的⽂本节点并作为⼦节点添加到name元素中71 name.appendChild(doc.createTextNode("⾹⾹"));72//将name⼦元素添加到student中73 student.appendChild(name);74/**75 * 下⾯的元素依次加⼊即可76 * */77 num = doc.createElement("Num");78 num.appendChild(doc.createTextNode("1006010066"));79 student.appendChild(num);8081 classes = doc.createElement("Classes");82 classes.appendChild(doc.createTextNode("眼视光5"));83 student.appendChild(classes);8485 address = doc.createElement("Address");86 address.appendChild(doc.createTextNode("浙江温州"));87 student.appendChild(address);8889 tel = doc.createElement("Tel");90 tel.appendChild(doc.createTextNode("123890"));91 student.appendChild(tel);9293//将student作为⼦元素添加到树的根节点school94 school.appendChild(student);95//将内存中的⽂档通过⽂件流⽣成insertSchool.xml,XmlDocument位于crison.jar下96 ((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/dom/insertSchool.xml"));97 System.out.println("成功");98 }catch (Exception e) {99// TODO: handle exception100 e.printStackTrace();101 }102 }103public static void main(String[] args){104//读取105 DomDemo.queryXml();106//插⼊107 DomDemo.insertXml();108 }109 }110运⾏后结果:然后到⽬录下查看⽣成的xml⽂件:打开查看内容:上⾯添加元素后输出的⽂件与之前的⽂件不是同⼀个⽂件,如果需要输出到原⽂件中,那么只要将路径改为原⽂间路径即可:src/xidian/sl/dom/school.xml2.创建XML过程与插⼊过程相似,就是Document需要创建package xidian.sl.dom;import java.io.FileOutputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.apache.crimson.tree.XmlDocument;import org.w3c.dom.Document;import org.w3c.dom.Element;public class CreateNewDom {/*** 创建xml⽂档* */public static void createDom(){Document doc;Element school,student;Element name = null;Element num = null;Element classes = null;Element address = null;Element tel = null;try{//得到DOM解析器的⼯⼚实例DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();//从DOM⼯⼚中获得DOM解析器DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();//创建⽂档树模型对象doc = dbBuilder.newDocument();if(doc != null){//创建school元素school = doc.createElement("School");//创建student元素student = doc.createElement("Student");//设置元素Student的属性值为231student.setAttribute("examId", "23");//创建名称为Name的元素name = doc.createElement("Name");//创建名称为⾹⾹的⽂本节点并作为⼦节点添加到name元素中name.appendChild(doc.createTextNode("⾹⾹"));//将name⼦元素添加到student中student.appendChild(name);/*** 下⾯的元素依次加⼊即可* */num = doc.createElement("Num");num.appendChild(doc.createTextNode("1006010066"));student.appendChild(num);classes = doc.createElement("Classes");classes.appendChild(doc.createTextNode("眼视光5"));student.appendChild(classes);address = doc.createElement("Address");address.appendChild(doc.createTextNode("浙江温州"));student.appendChild(address);tel = doc.createElement("Tel");tel.appendChild(doc.createTextNode("123890"));student.appendChild(tel);//将student作为⼦元素添加到树的根节点schoolschool.appendChild(student);//添加到⽂档树中doc.appendChild(school);//将内存中的⽂档通过⽂件流⽣成insertSchool.xml,XmlDocument位于crison.jar下((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/dom/createSchool.xml")); System.out.println("创建成功");}}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public static void main(String[] args) {CreateNewDom.createDom();}}运⾏结果:DOM的操作应该还是⾮常简单明了的,掌握了没哦。

XML基础复习习题2016

XML基础复习习题2016

一、选择题1.XML采用以下哪种数据组织结构?( C )A 星状结构B 线状结构C树状结构D网状结构2.下列关于XML文档中根元素的说法不正确的是( D )A每一个结构完整的XML文档中有且只有一个根元素B 根元素完全包括了文档中其他所有元素C 根元素的起始标记要放在其他所有元素的起始标记之前,而根元素的结束标记要放在其他所有元素的结束标记之后D 根元素不能包含属性节点3.下面哪个公司或组织制定了XML:( C )A ISOB OracleC W3CD Micrsoft4.>、<、&等在XML文档中被赋予了特殊的意义,所以在XML文档中不能直接包含这些字符,而是对这些字符采用了特殊编码,< 对应的特殊编码是:(B)A &amp;B &lt;C &lgt;D &quto;5.以下说法不符合XML语法规则的是( C )A)标记头和标记末的大小写一致B)元素之间要正确的嵌套C)结束标记可有可无D)每个XML文档只能有一个根元素6.以下XML片段写法正确的是( D )A <root attribute=”first”/>B <root attribute=first />C <root attribute/>D <root attribute=”first” value=”aaa”/>E <root attribute=”first” value=”aaa”>7.用于修饰属性的缺省值不包含哪一项( C )A #FIXEDB #REQUIREDC #PCDATAD #IMPLIED8.以下关于SAX的说法正确的是( B )A)使用SAX可修改XMLB)SAX是事件驱动型XML解析器C)SAX是对象模型XML解析器D)以上答案都不对9.DOM解析中,下面( A )方法可以获得XML文档节点树的根元素节点。

获取注解的所有方法

获取注解的所有方法

获取注解的所有方法获取注解的方法有很多,下面就介绍几种常用的获取注解的方法:1、通过Java反射获取注解:Java反射技术可以从Java的类文件中获取注解,使用该技术只需要加载Class对象,然后通过getAnnotation()方法获取注解信息,具体代码如下:Class clazz = Class.forName(className);Annotation[] annotations = clazz.getAnnotations(); //获取注解2、从已加载的类中获取注解:除了使用反射从Class文件中加载注解外,还可以从已加载的类中获取注解,主要是通过Class对象的getDeclaredAnnotations()方法获取,具体代码如下:Annotation [] annotations = class.getDeclaredAnnotations();//已加载的类获取注解3、从资源文件中获取注解:可以使用Java的URLConnection和InputStream类从资源文件中读取注解,然后使用类似getAnnotation()的方法获取注解。

4、从XML文件中获取注解:首先可以将XML文件解析成一个org.w3c.dom.Document,然后使用Document的getElementsByTagName(“annotation”)方法获取所有的注解元素,最后遍历每个注解元素,获取相应的属性值即可。

5、从数据库中获取注解:可以使用JDBC技术先从数据库中查询出所有的信息,然后用反射技术获取注解。

6、从jar文件中获取注解:jar文件包含了Java编译后的class文件,可以使用URLConnection和InputStream类从jar文件中获取class文件,然后使用反射技术获取注解信息。

7、从文本文件中获取注解:文本文件也可以包含注解信息,可以使用Reader类的read()方法将文本文件的内容读取出来,然后进行解析,获取注解信息。

xml的四种解析方法及源代码

xml的四种解析方法及源代码

xml的四种解析方法及源代码(SAX、DOM、JDOM、DOM4J)第二种:DOM解析DOM中的核心概念就是节点。

DOM在分析XML文档时,将将组成XML文档的各个部分(元素、属性、文本、注释、处理指令等)映射为一个对象(节点)。

在内存中,这些节点形成一课文档树。

整棵树是一个节点,树中的每一个节点也是一棵树(子树),可以说,DOM就是对这棵树的一个对象描述,我们通过访问树中的节点来存取XML文档的内容。

PS:属性节点是附属于元素的,不能被看做是元素的子节点,更不能作为一个单独的节点DOMPrinter.javaJava代码import org.w3c.dom.Document;import dNodeMap;import org.w3c.dom.Node;import .apache.xerces.internal.parsers.DOMParser;public class DOMPrinter{public static void main(String[] args){try{/** *//** 获取Document对象 */DOMParser parser = new DOMParser();parser.parse("db.xml");Document document = parser.getDocument();printNode(document);} catch (Exception e){e.printStackTrace();}}public static void printNode(Node node){short nodeType=node.getNodeType();switch(nodeType){case Node.PROCESSING_INSTRUCTION_NODE://预处理指令类型 printNodeInfo(node);break;case Node.ELEMENT_NODE://元素节点类型printNodeInfo(node);printAttribute(node);break;case Node.TEXT_NODE://文本节点类型printNodeInfo(node);break;default:break;}Node child=node.getFirstChild();while(child!=null){printNode(child);child=child.getNextSibling();}}/** *//*** 根据节点类型打印节点* @param node*/public static void printNodeInfo(Node node){if (node.getNodeType() == Node.ELEMENT_NODE){System.out.println("NodeName: " + node.getNodeName()); }else if (node.getNodeType() == Node.TEXT_NODE){String value = node.getNodeValue().trim();if (!value.equals(""))System.out.println("NodeValue: " + value);elseSystem.out.println();}else{System.out.println(node.getNodeName()+" : "+node.getNodeValu e());}}/** *//*** 打印节点属性* @param aNode 节点*/public static void printAttribute(Node aNode){NamedNodeMap attrs = aNode.getAttributes();if(attrs!=null){for (int i = 0; i < attrs.getLength(); i++){Node attNode = attrs.item(i);System.out.println("Attribute: " + attNode.getNodeName() + "=\"" + attNode.getNodeValue()+"\"");}}}DOM生成XML文档:DOMCreateExample.javaJava代码import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import .apache.xml.internal.serialize.XMLSerializer;public class DOMCreateExample{public static void main(String[] args) throws ParserConfiguratio nException{//DOMImplementation domImp = DOMImplementationImpl.getDOMImple mentation();DocumentBuilderFactory builderFact = DocumentBuilderFactory.ne wInstance();DocumentBuilder builder = builderFact.newDocumentBuilder();Document doc = builder.newDocument();//Document doc = domImp.createDocument(null, null, null);Element root = doc.createElement("games");Element child1 = doc.createElement("game");child1.appendChild(doc.createTextNode("Final Fantasy VII")); child1.setAttribute("genre", "rpg");root.appendChild(child1);doc.appendChild(root);XMLSerializer serial;try{serial = new XMLSerializer(new FileOutputStream("domcreate.x ml"), null);serial.serialize(doc);} catch (FileNotFoundException e1){e1.printStackTrace();} catch (IOException e){e.printStackTrace();}}}第三种JDOM解析JDOM利用了java语言的优秀特性,极大地简化了对XML文档的处理,相比DOM 简单易用。

java xml格式返回报文解析

java xml格式返回报文解析

java xml格式返回报文解析Java中可以使用多种方式解析XML格式的返回报文,常见的方式有DOM解析、SAX解析以及基于XML绑定技术的解析。

每种方式都有不同的特点和适用场景,下面将详细介绍这三种解析方式。

1. DOM解析:DOM(Document Object Model)解析是将整个XML文档加载到内存中,构建成一个树形结构,并提供API来操作这个树。

DOM解析提供了许多API,可以通过节点遍历和搜索、属性读取和设置、节点创建和删除等方式来处理XML文档。

DOM解析适用于对XML文档进行多次读写操作,如增删改查等复杂的操作。

使用Java的DOM解析,可以通过以下几个步骤实现:1)使用DocumentBuilderFactory创建一个DocumentBuilder对象。

2)调用DocumentBuilder的parse方法,传入XML文件的输入流,将XML文档解析为一个Document对象。

3)通过Document对象可以获取XML文档的根元素,从而开始对XML文档进行遍历和操作。

DOM解析的优点是能够将整个XML文档加载到内存中,便于操作和修改。

但是对于较大的XML文件,DOM解析会消耗大量的内存空间。

2. SAX解析:SAX(Simple API for XML)解析是一种基于事件驱动的解析方式,它逐行读取XML文档并触发相应的事件,应用程序根据事件的发生来处理XML文档。

SAX解析的特点是速度快、内存消耗小,适用于对XML文档进行单次顺序读取的操作。

使用Java的SAX解析,可以通过以下几个步骤实现:1)定义一个继承自DefaultHandler的处理器类,重写相应的事件回调方法。

2)使用SAXParserFactory创建一个SAXParser对象。

3)调用SAXParser的parse方法,传入XML文件的输入流和处理器对象,开始解析XML文档。

SAX解析的优点是速度快,内存消耗小,适用于大型XML文件的解析。

JAVA 解析XML 文件的三种解析方法

JAVA 解析XML 文件的三种解析方法

创建解析XML文件的三种解析方法1、第一种用w3c解析package w3c;import java.io.File;import java.io.FileOutputStream;import java.util.Random;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;public class w3c {public static void main(String[] args) throws Exception{ createXml();}//创建XML文档并创建节点public static void createXml() throws Exception{//获取XML解析器工厂类DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();//获取XML解析器DocumentBuilder db = dbf.newDocumentBuilder();//获取操作的document对象Document document = db.newDocument();//设置XML文件的版本document.setXmlVersion("1.0");//创建根节点Element root = document.createElement("students");//将根节点添加到document对象中document.appendChild(root);//声明一个姓名的数组String nameList[] = {"吕布","赵云","马超","张飞","关羽","许褚","孙策","周瑜","夏侯渊","张颌","于禁","黄忠","典韦","曹仁","程普"};String sexList[] = {"男","女"};//循环添加数据for(int i = 0 ;i < 20 ; i++){//创建根元素节点Element rootelement = document.createElement("student");//声明参数IDString id ="";//循环生成一个9为的随机ID数for(int j = 0; j< 9 ; j ++ ){id += new Random().nextInt(8)+1;}//设置根元素节点的属性rootelement.setAttribute("id",id);//将根元素节点添加到根节点中root.appendChild(rootelement);//设置元素节点Element name = document.createElement("name");Element sex = document.createElement("sex");Element age = document.createElement("age");Element phone = document.createElement("phone");//给元素节点赋值name.setTextContent(nameList[newRandom().nextInt(nameList.length)]);sex.setTextContent(sexList[newRandom().nextInt(sexList.length)]);age.setTextContent(new Random().nextInt(20)+20+"");String tel ="";for(int k = 0; k< 7 ; k++ ){tel += new Random().nextInt(9);}phone.setTextContent("0756-"+tel);//将元素节点添加到根元素节点中rootelement.appendChild(name);rootelement.appendChild(sex);rootelement.appendChild(age);rootelement.appendChild(phone);}//开始把Document映射到文件TransformerFactory transFactory =TransformerFactory.newInstance();Transformer transFormer = transFactory.newTransformer();//生成的XML文件File file = new File("w3c.xml");//判断XML文件存不存在,如果不存在则创建if(file.exists()){file.createNewFile();}//设置是否添加空格transFormer.setOutputProperty(OutputKeys.INDENT, "yes");//设置输出文件的格式transFormer.setOutputProperty(OutputKeys.ENCODING, "utf-8");//输出XML文件transFormer.transform(new DOMSource(document), newStreamResult(new FileOutputStream(file)));//输出XML文件的路径System.out.println(file.getAbsolutePath());}//解析XML文档public static void resolving() throws Exception{//获取XML解析器工厂类DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();//获取XML解析器DocumentBuilder db = dbf.newDocumentBuilder();//获取操作的document对象Document document = db.parse(new File("w3c.xml"));//获取XML文件的根元素节点NodeList root = document.getElementsByTagName("student");//循环根元素节点信息for(int i = 0 ; i < root.getLength() ;i++){Element student = (Element)root.item(i);System.err.println("id = "+student.getAttribute("id")+" name = "+student.getElementsByTagName("name").item(0).getTextContent()+" sex = "+student.getElementsByTagName("sex").item(0).getTextContent()+" age = "+student.getElementsByTagName("age").item(0).getTextContent()+" phone = "+student.getElementsByTagName("phone").item(0).getTextContent());}}}2、第二种用jdom解析package jdom;import java.io.FileOutputStream;import java.util.Iterator;import java.util.List;import java.util.Random;import org.jdom.Document;import org.jdom.Element;import org.jdom.input.SAXBuilder;import org.jdom.output.Format;import org.jdom.output.XMLOutputter;public class jdom {private static String xmlpath = "jdom.xml";public static void main(String[] args) throws Exception{ //resolving();createXml();}//创建XML文件并添加节点public static void createXml() throws Exception{ //创建document对象Document document = new Document();//创建根节点Element root = new Element("students");//将根节点添加到document对象中document.addContent(root);for(int i = 0 ;i < 20 ; i++){//创建根元素节点Element student = new Element("student");//声明参数IDString id ="";//循环生成一个9为的随机ID数for(int j = 0; j< 9 ; j ++ ){id += new Random().nextInt(8)+1;}//设置跟元素节点的属性student.setAttribute("id",id);//将根元素节点添加到根节点中root.addContent(student);//声明一个姓名的数组String nameList[] = {"吕布","赵云","马超","张飞","关羽","许褚","孙策","周瑜","夏侯渊","张颌","于禁","黄忠","典韦","曹仁","程普"};String sexList[] = {"男","女"};//创建元素节点Element name = new Element("name");Element sex = new Element("sex");Element age =new Element("age");Element phone = new Element("phone");//设置根元素节点的文本值name.setText(nameList[newRandom().nextInt(nameList.length)]);sex.setText(sexList[new Random().nextInt(sexList.length)]);age.setText(new Random().nextInt(20)+20+"");String tel ="";for(int k = 0; k< 7 ; k++ ){tel += new Random().nextInt(9);}phone.setText("0756-"+tel);//将元素节点添加到根元素节点中student.addContent(name);student.addContent(sex);student.addContent(age);student.addContent(phone);}//设置XML输出排版Format format = Format.getPrettyFormat();XMLOutputter out = new XMLOutputter(format);//输出XML文件out.output(document, new FileOutputStream(xmlpath));}//解析XML文档@SuppressWarnings("rawtypes")public static void resolving() throws Exception{//获取XML解析器SAXBuilder builder = new SAXBuilder();//获取document对象Document doucment = builder.build(xmlpath);//获取根节点Element students = doucment.getRootElement();//获取根元素节点List studentList = students.getChildren("student");//循环获取元素文本值,第一种方法for(int i = 0 ; i< studentList.size() ; i++ ){Element student = (Element)studentList.get(i);System.out.println("id ="+student.getAttributeValue("id")+" name = "+student.getChildText("name")+" sex = "+student.getChildText("sex")+" age = "+student.getChildText("age")+" phone = "+student.getChildText("phone"));}System.err.println("\n---------------------------------------------------------------------");//循环获取元素文本值,第二种方法for(Iterator iter=studentList.iterator();iter.hasNext();){ Element student = (Element)iter.next();System.out.println("id ="+student.getAttributeValue("id")+" name = "+student.getChildText("name")+" sex = "+student.getChildText("sex")+" age = "+student.getChildText("age")+" phone = "+student.getChildText("phone"));}}}3、第三种用dom4j解析package dom4j;import java.io.File;import java.io.FileWriter;import java.util.Iterator;import java.util.List;import java.util.Random;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class dom4j {private static String xmlpath = "dom4j.xml";public static void main(String[] args)throws Exception{//createXml();resolving();}public static void createXml() throws Exception{//创建document对象Document document = DocumentHelper.createDocument();//创建根节点Element root = DocumentHelper.createElement("studnets");//将根节点添加到document对象中document.setRootElement(root);for(int i = 0 ;i < 20 ; i++){//创建根元素节点并将根元素节点添加到根节点中Element student = root.addElement("student");//设置根元素节点的值//声明参数IDString id ="";//循环生成一个9为的随机ID数for(int j = 0; j< 9 ; j ++ ){id += new Random().nextInt(8)+1;}student.addAttribute("id",id);//创建元素节点并将元素节点添加到根元素节点中Element name = student.addElement("name");Element sex = student.addElement("sex");Element age = student.addElement("age");Element phone = student.addElement("phone");//声明一个姓名的数组String nameList[] = {"吕布","赵云","马超","张飞","关羽","许褚","孙策","周瑜","夏侯渊","张颌","于禁","黄忠","典韦","曹仁","程普"};String sexList[] = {"男","女"};//设置元素节点的文本值name.setText(nameList[newRandom().nextInt(nameList.length)]);sex.setText(sexList[new Random().nextInt(sexList.length)]);age.setText(new Random().nextInt(20)+20+"");String tel ="";for(int k = 0; k< 7 ; k++ ){tel += new Random().nextInt(9);}phone.setText("0756-"+tel);}//设置XML文件输出的格式OutputFormat format = new OutputFormat("\t", true);format.setEncoding("utf-8");XMLWriter xmlWriter = new XMLWriter(new FileWriter(xmlpath), format);//输出XML文件xmlWriter.write(document);xmlWriter.close();}//解析XML文件@SuppressWarnings("rawtypes")public static void resolving() throws Exception{//获取XML解析器SAXReader saxReader = new SAXReader();//获取document对象Document document = saxReader.read(new File(xmlpath));//获取根节点Element root = document.getRootElement();//获取根元素节点List chindList = root.elements();//循环获取元素文本值,第一种方法for(Iterator iter = chindList.iterator(); iter.hasNext();){ Element student =(Element)iter.next();System.out.println("id = "+student.attributeValue("id")+" name = "+student.elementText("name")+" sex = "+student.elementText("sex")+" age = "+student.elementText("age")+" phone = "+student.elementText("phone"));}System.err.println("\n---------------------------------------------------------------------");//循环获取元素文本值,第二种方法for(int i = 0 ; i< chindList.size() ; i++ ){Element student = (Element)chindList.get(i);System.out.println("id = "+student.attributeValue("id")+" name = "+student.elementText("name")+" sex = "+student.elementText("sex")+" age = "+student.elementText("age")+" phone = "+student.elementText("phone"));}}}。

SAX与DOM接口比较

SAX与DOM接口比较

SAX与DOM接口比较基于DOM接口的解析器,解析XML文档时,会将XML文档以树模型的方式加载到内存中。

此时应用程序可以对树模型的任一个部分进行遍历和操作,通过D OM的树模型可以实现对XML文档的随机访问。

这种访问方式给应用程序的开发带来了很大的灵活性,它可以任意地控制整个XML文档中的内容。

然而,由于D OM解析器把整个XML文档转化成DOM树放在了内存中,因此,当XML文档比较大或者文档结构比较复杂时,对内存的需求就比较高。

而且,对于结构复杂的树的遍历也是一项比较耗时的操作。

所以,DOM解析器对机器性能的要求比较高,实现效率不十分理想。

不过,由于DOM解析器的树结构的思想与XML文档的结构相吻合,所以通过DOM树机制很容易实现随机访问。

基于SAX的解析器处理XML文档,会根据XML文档不同的部分触发不同的事件,此时可以根据触发的事件实现对XML文档访问。

由于事件触发本身是有时序性的,因此,SAX解析器提供的是一种对XML文档的顺序访问机制,对于已经分析过的部分,不能再倒回去重新处理。

SAX之所以被叫做“简单”应用程序接口,是因为SAX解析器只做了一些简单的工作,大部分工作还要由应用程序自己去做。

也就是说,SAX解析器在实现时,它只是顺序地检查XML文档中的字节流,判断当前字节是XML语法中的哪一部分,检查是否符合XML语法并触发相应的事件。

对于事件处理函数本身,要由应用程序自己来实现。

同DOM分析器相比,SAX解析器对XML文档的处理缺乏一定的灵活性,然而,对于那些只需要访问XML文档中的数据而不对文档进行更改的应用程序来说,SAX解析器的效率则更高。

由于S AX解析器实现简单,对内存要求比较低,因此实现效率比较高。

那么我们能不能通过SAX解析器处理比较复杂和大的XML文档中的数据,然后通过DOM解析器形成一个新的XML文档。

首先创建XML文档,打开记事本,将上述代码保存,名称为Example10.xml。

XML解析的三种方法

XML解析的三种方法

三种解析XML文件的方法在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件。

下面是本例子要解析的XML文件:文件名称:china.xml例子定义了一个javabean用于存放上面解析出来的xml内容,这个javabean为Person,代码:使用SAX读取XML文件SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。

SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。

所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。

下面是一些ContentHandler接口常用的方法:startDocument()当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。

endDocument()和上面的方法相对应,当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。

startElement(String namespaceURI, String localName, String qName, Attributes atts) 当读到一个开始标签的时候,会触发这个方法。

namespaceURI就是命名空间,localName 是不带命名空间前缀的标签名,qName是带命名空间前缀的标签名。

通过atts可以得到所有的属性名和相应的值。

要注意的是SAX中一个重要的特点就是它的流式处理,当遇到一个标签的时候,它并不会纪录下以前所碰到的标签,也就是说,在startElement()方法中,所有你所知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属等等其它与结构相关的信息,都是不得而知的,都需要你的程序来完成。

java dom解析

java dom解析

java dom解析摘要:I.简介- 什么是Java DOM 解析- DOM 解析与SAX 解析、XMLPULL 解析的区别II.Java DOM 解析的优势- 强大的功能- 易于使用- 支持所有XML 元素III.Java DOM 解析的步骤- 导入相关库- 创建解析器- 解析XML 文档- 处理解析结果IV.Java DOM 解析的实际应用- 在Java Web 开发中的应用- 在企业级应用中的使用V.总结- 回顾Java DOM 解析的优势和应用- 展望DOM 解析的未来发展正文:I.简介Java DOM 解析是指使用Java 语言对XML 文档进行解析的过程。

DOM 解析是将XML 文档转化为Java 对象的过程,这些对象可以方便地在Java 程序中进行操作。

与SAX 解析和XMLPULL 解析相比,DOM 解析具有更强大的功能和更高的灵活性,同时其易于使用,支持所有XML 元素,因此被广泛应用于Java 开发中。

II.Java DOM 解析的优势Java DOM 解析具有以下优势:1.强大的功能:DOM 解析能够将XML 文档转化为一个树形结构,方便开发者对XML 文档进行遍历和操作。

2.易于使用:DOM 解析提供了丰富的API,开发者可以轻松地使用这些API 对XML 文档进行解析和操作。

3.支持所有XML 元素:DOM 解析器可以处理所有的XML 元素,包括各种复杂结构和属性。

III.Java DOM 解析的步骤Java DOM 解析的基本步骤如下:1.导入相关库:要使用Java DOM 解析,首先需要导入相关的库,包括javax.xml.parsers 和org.w3c.dom 等。

2.创建解析器:使用DocumentBuilderFactory 类创建一个解析器对象。

3.解析XML 文档:使用解析器对象的parse() 方法将XML 文档解析为DOM 树。

4.处理解析结果:使用DOM 树的各个节点进行XML 文档的处理。

java dom解析

java dom解析

java dom解析**一、XML概述**XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。

它具有结构清晰、易于阅读和编写等特点。

XML文档由元素、属性、文本和注释组成。

在Java开发中,解析XML数据是一种常见的需求。

**二、DOM解析原理**DOM(文档对象模型)是一种编程接口,用于表示和操作XML文档。

DOM解析就是将XML文档转换为Java对象的过程。

DOM解析器读取XML 文档,构建一棵对象树,树的节点对应XML文档的元素、属性和文本。

开发者可以通过操作这棵树来访问和修改XML文档内容。

**三、Java DOM解析库介绍**Java提供了内置的DOM解析库,主要包括以下两类:1.JDK自带的XML解析库:提供了对XML文档的基本操作,如解析、查询、修改等。

2.第三方解析库:例如Apache Commons XML、Jackson等。

这些库提供了更丰富、高效的API,以及更好的异常处理和性能优化。

**四、Java DOM解析实例**以下是一个使用Java内置DOM解析库解析XML文档的示例:```javaimport java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;public class JavaDOMParseExample {public static void main(String[] args) throws Exception { File file = new File("example.xml");DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dBuilder =dbFactory.newDocumentBuilder();Document doc = dBuilder.parse(file);doc.getDocumentElement().normalize();Element rootElement = doc.getDocumentElement();System.out.println("Root element: " + rootElement.getNodeName());// 遍历和操作XML文档的其他节点// ...}}```**五、DOM解析优缺点分析**1.优点:DOM解析具有较好的可读性和可控性,开发者可以直接操作XML文档的结构,易于理解和实现。

java读取XML文件内容的四种方法

java读取XML文件内容的四种方法

Java parse XML methods(4)关键字: xml1. 介绍1>DOM(JAXP Crimson解析器)DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。

DOM是以层次结构组织的节点或信息片断的集合。

这个层次结构允许开发人员在树中寻找特定信息。

分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。

由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。

DOM 以及广义的基于树的处理具有几个优点。

首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。

它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。

DOM使用起来也要简单得多。

2>SAXSAX处理的优点非常类似于流媒体的优点。

分析能够立即开始,而不是等待所有的数据被处理。

而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。

这对于大型文档来说是个巨大的优点。

事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。

一般来说,SAX还比它的替代者DOM快许多。

选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。

DOM采用建立树形结构的方式访问XML文档,而SAX 采用的事件模型。

DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。

用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用 navigation APIs访问所需的树节点来完成任务。

可以很容易的添加和修改树中的元素。

然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。

由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。

SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。

XML DOM访问Document节点

XML  DOM访问Document节点

XML DOM访问Document节点使用DOM解析XML文档时,XML文档会被解析器转换为符合DOM树模型的逻辑视图。

此时整个XML文件会被封装成一个Document对象返回,也可以称该对象为Dcoument节点对象,Document对象是Document接口实例化而来的。

Java应用程序可以从Dcoument节点的子孙节点中获取整个XML文件中数据的细节。

Document节点对象两个直接子节点,类型分别是DocumentType类型和Ele ment类型,其中的DocumentType节点对应着XML文件所关联的DTD文件,可通过进一步获取该节点子孙节点来分析DTD文件中的数据;Element类型节点对应着XML文件的根节点,可通过进一步获取该Element类型节点子孙节点来分析XML 文件中的数据。

Document节点对象除了上一节使用的getXmlVersion()和getXmlEncoding()外,还具有下列方法,如表6-1所示:将上述代码保存,名称为Example3.xml。

创建解析XML文件的Java程序,其将上述代码保存,名称Example3.java。

打开命令提示符窗口,编译和解释执行该文件,会显示如图6-7所示窗口:图6-7 访问Document节点在该文件中,首先创建Doument接口的实例化对象document,通过document 对象调用getDocumentElement()方法获取XML文档元素标记的根节点对象root。

ro ot节点对象是一个Element节点,下面通过getNodeName()方法获取根节点名称,此处为“图书”节点。

代码“NodeList nodelist=document.getElementsByTagName("图书");”表示通过document对象获取节点名称为“图书”的节点集合,其集合长度可以用getLength()方法获取。

java解析xml详解及示例

java解析xml详解及示例

java解析xml详解及示例java 解析xml的几种方法第一种:DOMDOM的全称是Document Object Model,也即文档对象模型。

在应用程序中,基于DOM 的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。

通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称作随机访问机制。

DOM接口提供了一种通过分层对象模型来访问XML文档信息的方式,这些分层对象模型依据XML的文档结构形成了一棵节点树。

无论XML文档中所描述的是什么类型的信息,即便是制表数据、项目列表或一个文档,利用DOM所生成的模型都是节点树的形式。

也就是说,DOM强制使用树模型来访问XML文档中的信息。

由于XML本质上就是一种分层结构,所以这种描述方法是相当有效的。

DOM树所提供的随机访问方式给应用程序的开发带来了很大的灵活性,它可以任意地控制整个XML文档中的内容。

然而,由于DOM 分析器把整个XML文档转化成DOM树放在了内存中,因此,当文档比较大或者结构比较复杂时,对内存的需求就比较高。

而且,对于结构复杂的树的遍历也是一项耗时的操作。

所以,DOM分析器对机器性能的要求比较高,实现效率不十分理想。

不过,由于DOM分析器所采用的树结构的思想与XML 文档的结构相吻合,同时鉴于随机访问所带来的方便,因此,DOM分析器还是有很广泛的使用价值的。

Java代码import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;public class DomT est1{public static void main(String[] args) throws Exception{// step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器)DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();// System.out.println("class name: " + dbf.getClass().getName());// step 2:获得具体的dom解析器DocumentBuilder db = dbf.newDocumentBuilder();// System.out.println("class name: " + db.getClass().getName());// step3: 解析一个xml文档,获得Document对象(根结点)Document document = db.parse(new File("candidate.xml"));NodeList list = document.getElementsByTagName("PERSON");for(int i = 0; i < list.getLength(); i++){Element element = (Element)list.item(i);String content =element.getElementsByTagName("NAME").item(0).getFirstC hild().getNodeValue();System.out.println("name:" + content);content =element.getElementsByTagName("ADDRESS").item(0).getFir stChild().getNodeValue(); System.out.println("address:" + content);content =element.getElementsByTagName("TEL").item(0).getFirstChil d().getNodeValue();System.out.println("tel:" + content);content =element.getElementsByTagName("FAX").item(0).getFirstChil d().getNodeValue();System.out.println("fax:" + content);content =element.getElementsByTagName("EMAIL").item(0).getFirstC hild().getNodeValue();System.out.println("email:" + content);System.out.println("--------------------------------------");}}}Java代码import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Attr;import /doc/723478280.html,ment;import org.w3c.dom.Document;import org.w3c.dom.Element;import/doc/723478280.html,dNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;/*** 使用递归解析给定的任意一个xml文档并且将其内容输出到命令行上* @author*/public class DomT est3{public static void main(String[] args) throws Exception{DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();Document doc = db.parse(new File("student.xml"));//获得根元素结点Element root = doc.getDocumentElement();parseElement(root);}private static void parseElement(Element element){String tagName = element.getNodeName();NodeList children = element.getChildNodes();System.out.print("<" + tagName);//element元素的所有属性所构成的NamedNodeMap对象,需要对其进行判断 NamedNodeMap map = element.getAttributes();//如果该元素存在属性if(null != map){{//获得该元素的每一个属性Attr attr = (Attr)map.item(i);String attrName = attr.getName();String attrValue = attr.getValue();System.out.print(" " + attrName + "=\"" + attrValue + "\""); } }System.out.print(">");for(int i = 0; i < children.getLength(); i++){Node node = children.item(i);//获得结点的类型short nodeType = node.getNodeType();if(nodeType == Node.ELEMENT_NODE){//是元素,继续递归parseElement((Element)node);}else if(nodeType == Node.TEXT_NODE){//递归出口System.out.print(node.getNodeValue());}else if(nodeType == /doc/723478280.html,MENT_NODE) {System.out.print("System.out.print(data);System.out.print("-->");}}System.out.print("");}}第二种 sax:SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。

JAVA利用org.w3c.dom生成XML文件

JAVA利用org.w3c.dom生成XML文件

1package com.potevio.telecom.mobilenet;23//文件类4import java.io.File;56//文件输出类7import java.io.FileOutputStream;89//负责解析的类10import javax.xml.parsers.DocumentBuilder;11import javax.xml.parsers.DocumentBuilderFactory; 12//映射类13import javax.xml.transform.Transformer;14import javax.xml.transform.TransformerFactory; 1516//xml映射输入和输出类17import javax.xml.transform.dom.DOMSource;18import javax.xml.transform.stream.StreamResult; 1920//节点类21import org.w3c.dom.Document;22import org.w3c.dom.Element;2324/**25 * @description 使用DOM创建简单的XML26 *27 * @author Zhou-Jingxian28 *29 * @date Jun 19, 200930 *31 */32public class CreateRuleXML {3334public static void main(String[] args) {3536try{37//解析器工厂类38 DocumentBuilderFactory factory = DocumentBuilderFactory.newInsta nce();3940//解析器41 DocumentBuilder builder = factory.newDocumentBuilder();4243//操作的Document对象44 Document document = builder.newDocument();4546//设置XML的版本47 document.setXmlVersion("1.0");4849//创建根节点50 Element root = document.createElement("MobileNet");5152//将根节点添加到Document对象中53 document.appendChild(root);5455/**the first page*/56//设置第一个page元素到57 Element pageElement = document.createElement("page");5859//设置page节点的name属性60 pageElement.setAttribute("name", "list.jsp");6162/**method*/63//设置method节点64 Element methodElement = document.createElement("method");6566//给method设置值67 methodElement.setTextContent("get");6869//添加method节点到page节点内70 pageElement.appendChild(methodElement);7172/**display*/73//设置method节点74 Element displayElement = document.createElement("display");7576//给display设置值77 displayElement.setTextContent("list");7879//添加display节点到page节点内80 pageElement.appendChild(displayElement);8182/**request_param*/83//设置request_param节点84 Element request_paramElement = document.createElement("request _param");8586//给request_param设置值87 request_paramElement.setTextContent("request_param1|request_pa ram2");8889//添加request_param节点到page节点内90 pageElement.appendChild(request_paramElement);9192//将page段加人根节点内93 root.appendChild(pageElement);949596/**the second page*/97//设置第二个page元素到98 pageElement = document.createElement("page");99100//设置page节点的name属性101 pageElement.setAttribute("name", "content.jsp");102103/**method*/104//设置method节点105 methodElement = document.createElement("method"); 106107//给method设置值108 methodElement.setTextContent("post");109110//添加method节点到page节点内111 pageElement.appendChild(methodElement);112113/**display*/114//设置method节点115 displayElement = document.createElement("display"); 116117//给display设置值118 displayElement.setTextContent("content");119120//添加display节点到page节点内121 pageElement.appendChild(displayElement);122123/**url_title*/124//设置url_title节点125 Element url_titleElement = document.createElement("url_title");126127//给url_title设置值128 url_titleElement.setTextContent("title,publisher,published_calendar"); 129130//添加url_title节点到page节点内131 pageElement.appendChild(url_titleElement);132133//将page段加人根节点内134 root.appendChild(pageElement);135136137//开始把Document映射到文件138 TransformerFactory transFactory = TransformerFactory.newInstance ();139 Transformer transFormer = transFactory.newTransformer();140141//设置输出结果142 DOMSource domSource = new DOMSource(document);143144//生成xml文件145 File file = new File("MobileNetRule.xml");146147//判断是否存在,如果不存在,则创建148if(!file.exists()){149 file.createNewFile();150 }151152//文件输出流153 FileOutputStream out = new FileOutputStream(file); 154155//设置输入源156 StreamResult xmlResult = new StreamResult(out); 157158//输出xml文件159 transFormer.transform(domSource, xmlResult); 160161//测试文件输出的路径162 System.out.println(file.getAbsolutePath());163164 }catch(Exception e){165 e.printStackTrace();166167 }finally{168169 }170 }171172 }173运行打印的地址:D:\MyEclipse 6.0\workspace\WriteAndReadXML\MobileNetRule.xml将上面的地址输入到(IE)地址栏,得到如下截图: Life,simple and happy!。

第三章 XML文件的解析

第三章 XML文件的解析

7
什么是 SAX
读取和操纵 XML 文件的标准方法是 DOM(“文 DOM( 档对象模型” 档对象模型”)。这种方法需要读取整个文件并 将它存储到树结构中,资源占用较高。 Simple API for XML 或 SAX 允许正在读取文档时 处理该文档,这避免了在采取操作之前需要等待 存储文档的所有内容。 SAX 是由 XML-DEV 邮件列表的成员开发的, XMLJava 版本由 David egginson 维护。他们的目的是提 供一种更自然的方法来使用 XML,这种方法不会 XML,这种方法不会 涉及到使用 DOM 的那种开销。
4
为何使用非验证解析器? 为何使用非验证解析器?
速度和效率。要一个 XML 解析器处理 DTD 并确保每个 XML 的元素符合在 DTD 中的规则需要相当大的开销。如果确定一 个 XML 文档是有效的(可能来自一个数据 文档是有效的( 源),那就没有必要再次验证它了。 有时只是从一个文档中找出 XML 的标记。 一旦有了这些标记,就可以将数据从中提 取出然后加以处理。这时只需要一个非验 证解析器。
... import org.xml.sax.InputSource; ... xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(new SurveyReader()); InputSource source = new InputSource("surveys.xml"); xmlReader.parse(source); } catch (Exception e) { ...
11
设置内容处理程序
创建了解析器,则需要将 SurveyReader 设置 为内容处理程序,以便于其接收事件。 xmlReader 的 setContentHandler() 方法完成这 项工作。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想首先来了解点Java DOM 的API:1.解析器工厂类:DocumentBuilderFactory创建的方法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();2.解析器:DocumentBuilder创建方法:通过解析器工厂类来获得DocumentBuilder db = dbf.newDocumentBuilder();3.文档树模型Document创建方法:a.通过xml文档 Document doc = db.parse("bean.xml"); b.将需要解析的xml文档转化为输入流InputStream is = new FileInputStream("bean.xml");Document doc = db.parse(is);Document对象代表了一个XML文档的模型树,所有的其他Node都以一定的顺序包含在Document对象之内,排列成一个树状结构,以后对XML文档的所有操作都与解析器无关,直接在这个Document对象上进行操作即可;包含的方法:4.节点列表类NodeListNodeList代表了一个包含一个或者多个Node的列表,根据操作可以将其简化的看做为数组5.节点类NodeNode对象是DOM中最基本的对象,代表了文档树中的抽象节点。

但在实际使用中很少会直接使用Node对象,而是使用Node对象的子对象Element,Attr,Text等6.元素类Element是Node类最主要的子对象,在元素中可以包含属性,因而Element中有存取其属性的方法7.属性类Attr代表某个元素的属性,虽然Attr继承自Node接口,但因为Attr是包含在Element中的,但并不能将其看做是Element的子对象,因为Attr并不是DOM树的一部分基本的知识就到此结束,更加具体的大家可以参阅JDK API文档实战:1.使用DOM来遍历XML文档中的全部内容并且插入元素:school.xml文档:<?xml version = "1.0" encoding = "utf-8"?><School><Student><Name>沈浪</Name><Num>1006010022</Num><Classes>信管2</Classes><Address>浙江杭州3</Address><Tel>123456</Tel></Student><Student><Name>沈1</Name><Num>1006010033</Num><Classes>信管1</Classes><Address>浙江杭州4</Address><Tel>234567</Tel></Student><Student><Name>沈2</Name><Num>1006010044</Num><Classes>生工2</Classes><Address>浙江杭州1</Address><Tel>345678</Tel></Student><Student><Name>沈3</Name><Num>1006010055</Num><Classes>电子2</Classes><Address>浙江杭州2</Address><Tel>456789</Tel></Student></School>DomDemo.javapackage xidian.sl.dom;import java.io.FileOutputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.apache.crimson.tree.XmlDocument;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;public class DomDemo {/*** 遍历xml文档* */public static void queryXml(){try{//得到DOM解析器的工厂实例DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();//从DOM工厂中获得DOM解析器DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();//把要解析的xml文档读入DOM解析器Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");System.out.println("处理该文档的DomImplementation对象 = "+doc.getImplementation());//得到文档名称为Student的元素的节点列表NodeList nList = doc.getElementsByTagName("Student");//遍历该集合,显示结合中的元素及其子元素的名字for(int i = 0; i< nList.getLength() ; i ++){Element node = (Element)nList.item(i);System.out.println("Name: "+node.getElementsByTagName("Name").item(0).getFirstChild().getNodeValue());System.out.println("Num: "+node.getElementsByTagName("Num").item(0).getFirstChild().getNodeValue());System.out.println("Classes: "+node.getElementsByTagName("Classes").item(0).getFirstChild().getNodeValue());System.out.println("Address: "+node.getElementsByTagName("Address").item(0).getFirstChild().getNodeValue());System.out.println("Tel: "+node.getElementsByTagName("Tel").item(0).getFirstChild().getNodeValue());}}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}/*** 向已存在的xml文件中插入元素* */public static void insertXml(){Element school = null;Element student = null;Element name = null;Element num = null;Element classes = null;Element address = null;Element tel = null;try{//得到DOM解析器的工厂实例DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();//从DOM工厂中获得DOM解析器DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();//把要解析的xml文档读入DOM解析器Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");//得到文档名称为Student的元素的节点列表NodeList nList = doc.getElementsByTagName("School");school = (Element)nList.item(0);//创建名称为Student的元素student = doc.createElement("Student");//设置元素Student的属性值为231student.setAttribute("examId", "23");//创建名称为Name的元素name = doc.createElement("Name");//创建名称为香香的文本节点并作为子节点添加到name元素中name.appendChild(doc.createTextNode("香香"));//将name子元素添加到student中student.appendChild(name);/*** 下面的元素依次加入即可* */num = doc.createElement("Num");num.appendChild(doc.createTextNode("1006010066"));student.appendChild(num);classes = doc.createElement("Classes");classes.appendChild(doc.createTextNode("眼视光5"));student.appendChild(classes);address = doc.createElement("Address");address.appendChild(doc.createTextNode("浙江温州"));student.appendChild(address);tel = doc.createElement("Tel");tel.appendChild(doc.createTextNode("123890"));student.appendChild(tel);//将student作为子元素添加到树的根节点schoolschool.appendChild(student);//将内存中的文档通过文件流生成insertSchool.xml,XmlDocument位于crison.jar下 ((XmlDocument)doc).write(newFileOutputStream("src/xidian/sl/dom/insertSchool.xml"));System.out.println("成功");}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public static void main(String[] args){//读取DomDemo.queryXml();//插入DomDemo.insertXml();}}运行后结果:然后到目录下查看生成的xml文件:打开查看内容:上面添加元素后输出的文件与之前的文件不是同一个文件,如果需要输出到原文件中,那么只要将路径改为原文间路径即可:src/xidian/sl/dom/school.xml2.创建XML过程与插入过程相似,就是Document需要创建package xidian.sl.dom;import java.io.FileOutputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.apache.crimson.tree.XmlDocument;import org.w3c.dom.Document;import org.w3c.dom.Element;public class CreateNewDom {/*** 创建xml文档* */public static void createDom(){Document doc;Element school,student;Element name = null;Element num = null;Element classes = null;Element address = null;Element tel = null;try{//得到DOM解析器的工厂实例DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();//从DOM工厂中获得DOM解析器DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();//创建文档树模型对象doc = dbBuilder.newDocument();if(doc != null){//创建school元素school = doc.createElement("School");//创建student元素student = doc.createElement("Student");//设置元素Student的属性值为231student.setAttribute("examId", "23");//创建名称为Name的元素name = doc.createElement("Name");//创建名称为香香的文本节点并作为子节点添加到name元素中name.appendChild(doc.createTextNode("香香"));//将name子元素添加到student中student.appendChild(name);/*** 下面的元素依次加入即可* */num = doc.createElement("Num");num.appendChild(doc.createTextNode("1006010066"));student.appendChild(num);classes = doc.createElement("Classes");classes.appendChild(doc.createTextNode("眼视光5"));student.appendChild(classes);address = doc.createElement("Address");address.appendChild(doc.createTextNode("浙江温州"));student.appendChild(address);tel = doc.createElement("Tel");tel.appendChild(doc.createTextNode("123890"));student.appendChild(tel);//将student作为子元素添加到树的根节点schoolschool.appendChild(student);//添加到文档树中doc.appendChild(school);//将内存中的文档通过文件流生成insertSchool.xml,XmlDocument位于crison.jar下 ((XmlDocument)doc).write(newFileOutputStream("src/xidian/sl/dom/createSchool.xml"));System.out.println("创建成功");}}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public static void main(String[] args) {CreateNewDom.createDom();}}运行结果:DOM的操作应该还是非常简单明了的,掌握了没哦。

相关文档
最新文档