「xmljava工具」java生成xml文件工具类

博主:adminadmin 2023-01-14 16:36:05 645

本篇文章给大家谈谈xmljava工具,以及java生成xml文件工具类对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

目前在Java中几种常用的XML解析器的比较

目前常用的XML的解析器主要有:SAX,DOM,Xerces

1、SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。另一方面,由于应用程序没有以任何方式存储数据,使用 SAX 来更改数据或在数据流中往后移是不可能的。

2、DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。另一方面,在内存中构造这样的树涉及大量的开销。大型文件完全占用系统内存容量的情况并不鲜见。此外,创建一棵 DOM 树可能是一个缓慢的过程。

3、选择 DOM 还是选择 SAX,这取决于下面几个因素: 

      应用程序的目的:如果打算对数据作出更改并将它输出为 XML,那么在大多数情况下,DOM 是适当的选择。并不是说使用 SAX 就不能更改数据,但是该过程要复杂得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。 

      数据容量: 对于大型文件,SAX 是更好的选择。数据将如何使用:如果只有数据中的少量部分会被使用,那么使用 SAX 来将该部分数据提取到应用程序中可能更好。 另一方面,如果您知道自己以后会回头引用已处理过的大量信息,那么 SAX 也许不是恰当的选择。 

      对速度的需要:SAX 实现通常要比 DOM 实现更快。 

      SAX 和 DOM 不是相互排斥的,记住这点很重要。您可以使用 DOM 来创建 SAX 事件流,也可以使用 SAX 来创建 DOM 树。事实上,用于创建 DOM 树的大多数解析器实际上都使用 SAX 来完成这个任务!

4、SAX,DOM是两种对XML文档进行分析的方法(没有具体的实现,只有接口),所以不是解释器,如果光有他们,你是完成不了对xml文档的处理的。SAX的包是org.xml.sax,DOM的包是org.w3c.dom,包的名称很重要,它有助于你理解他们之间的关系。

5、jaxp是api,他封装了sax/dom两种接口。并在sax/dom的基础之上,作了一套比较简单的api以供开发人员使用。jaxp的包是javax.xml.parsers,可以看看jaxp的源文件,它的文件中包含了对sax或者dom的引用(import)jaxp也不是具体的实现,他只是一套api。如果你仅仅有jaxp那是无法工作的,(其实jaxp只是完成对sax、dom的包装,生成了DocumentBuilderFactory/DocumentBuilder和SAXParserFactory SAXParser。也就是设计模式中的工厂模式,他的好处就是具体的对象( 解释器)建立由子类完成)

6、xerces解释器(号称地球上最快的xml解释器)在xerces中对jaxp中定义的SAXParser SAXParserFactory DocumentBuilder DocumentBuilderFactory进行了继承(extends)对应SAXParserImpl XParserFactoryImpl DocumentBuilderImpl DocumentBuilderFactoryImpl这就是为什么你的classpath中只要有xerces.jar(其中包含了sax dom jaxp )和 xercesImpl.jar就可以的原因了.

xml在java项目中起到的作用具体是什么?

设计xml的目的是用作数据交换,当然也可以用作保存数据。

xml保存数据具有平台无关,规范化。通过提供方提供的读取程序就可以读取出xml数据。

特点:

xml的特点是具有规范化(需要用到xsd),层次性,一看就懂。

缺点:

一个标签需要一个匹配的结束标签,比较冗余。

其他数据交换格式:

其他数据交换格式有:json、yaml等。

可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。

在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。

使用Java自带SAX工具解析XML

studentInfo xml

?xml version= encoding= gb ?student    person age= ! 如果没有age属性 默认的为         name崔卫兵/name        collegePC学院/college        telephone /telephone        notes男 年生 硕士 现就读于北京邮电大学/notes    /person    person        namecwb/name        college leader= leader PC学院/college! 如果没有leader属性 默

认的为leader         telephone /telephone        notes男 年生 硕士 现就读于中国农业大学/notes    /person    person age=         namexxxxx/name        college leader= 学院领导 xxx学院/college        telephone /telephone        notes注视中 注释中/notes    /person/student

SAXHandler java

package saxExample;

import java util HashMap;import xml sax *;import xml sax helpers DefaultHandler;

/** * 继承DefaultHandler类 用SAX实现对xml的遍历 * @author cuiweibing * @since  */

public class SAXHandler    extends DefaultHandler {  //存放所有的节点(这里的节点等于原来的节点+编号)以及它所对应的值  private HashMapString String hashMap = new HashMapString String();  //目前的节点  private String currentElement = null;  //目前节点所对应的值  private String currentValue = null;  //用于节点编号(具体到person)  private static int i= ;   public HashMap getHashMap() {    return hashMap;  }   public void characters(char[] ch int start int length) throws SAXException {    //取出目前节点对应的值    currentValue = new String(ch start length);  }   public void startElement(String uri String localName String qName                            Attributes attr) throws SAXException {    if(qName equalsIgnoreCase( student )){      //currentElement= ;    }else if (qName equalsIgnoreCase( person )){      i++;      //currentElement= ;      String age=attr getValue( age );      if(age!=null){       hashMap put(qName+ age +i age);      }else{       hashMap put(qName+ age +i );      }    }else if (qName equalsIgnoreCase( college )){        currentElement= qName;        String leader=attr getValue( leader );        if(leader!=null){         hashMap put(qName+ leader +i leader);        }else{         hashMap put(qName+ leader +i leader );        }    }else{      currentElement= qName;    }   }   public void endElement(String uri String localName String qName) throws SAXException {    if (qName equalsIgnoreCase( student )){//      hashMap put(currentElement currentValue);    }else if (qName equalsIgnoreCase( person )){     }else{      currentElement+=i;      hashMap put(currentElement currentValue);    }  }}

TestSAXHandler java

package saxExample;

import java io File;import java util HashMap;import javax xml parsers SAXParserFactory;import javax xml parsers SAXParser;

/** * 解析主类 * @author cuiweibing * @since  */

public class TestSAXHandler {  public TestSAXHandler() {  }

public static void main(String[] args) {    try{      //初始化与解析      SAXHandler handler = new SAXHandler();      SAXParserFactory saxparserfactory = SAXParserFactory newInstance();      SAXParser saxparser = saxparserfactory newSAXParser();      saxparser parse(new File( studentInfo xml ) handler);

//解析完后获取解析信息      HashMap hashMap = handler getHashMap();      System out println( 姓名\t年龄\t学院\t学院领导\t电话\t\t备注 );      for(int i= ;ihashMap size();i+= ){        int j=i/ ;        System out print(hashMap get( name +j)+ \t );        System out print(hashMap get( person age +j)+ \t );        System out print(hashMap get( college +j)+ \t );        System out print(hashMap get( college leader +j)+ \t );        System out print(hashMap get( telephone +j)+ \t );        System out println(hashMap get( notes +j)+ \t );      }    }catch(Exception ex){      ex printStackTrace();    }  }}

lishixinzhi/Article/program/Java/JSP/201311/19670

关于xmljava工具和java生成xml文件工具类的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。