预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共21页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

用Java如何处理XML数据用Java如何处理XML数据Java原生内置的处理XML的技术基本有这么几种:DOM,SAX,Stax,Jaxb.那么用Java我们要如何处理XML数据,希望对大家有帮助!DOM:DocumentObjectModel顾名思义就是在内存中构建树形结构。处理小的XML文件还算勉强应付。如果文件比较大,他需要一次性装载整个XML,你会忍不了他的速度,并且他会吃光你所有的内存,最后程序会负分滚粗。SAX:SimpleAPIforXMLParsing一般名字应该是没实现的愿望体现。比如一个人如果叫王金库,那么可以肯定他绝对没有金库。这样你应该理解这个API为啥叫Simple了。这API是回调式的,也就是你写的程序是被别人调戏用的。这API比DOM快点,而且是可以部分装载XML,这样你不用害怕OOME了。啥?你想写XML?忘掉这个叫Simple的玩意儿吧。Stax:StreamingAPIforXML这个总算是靠点谱了。你写的程序是主动式的访问XML各个节点。流式访问,不用担心OOME,速度嘛算是原生态里面最好的了。而且读写都支持,你不用这个还用哪个啊?给个Stax的代码片段,算是参考吧:XMLInputFactoryxif=XMLInputFactory.newInstance();XMLStreamReaderxsr=xif.createXMLStreamReader(newFileReader("input.xml"));xsr.nextTag();//Advancetostatementselementlongi=0;Stringaction=null;while(xsr.hasNext()){if(xsr.next()==XMLStreamConstants.START_ELEMENT){if("ContentItem".equals(xsr.getLocalName())){action=getAttributeValue(xsr,"action");}elseif("Data".equals(xsr.getLocalName())){i++;}}}JAXB:JavaArchitectureforXMLBinding这是一个很酷的API.想法就是把XML各种属性定义映射到普通的JavaBean上。你无须关心解析反解析的细节,只要用普通的JavaBean就完成和XML的交互了。可是怎么构建一一映射的JavaBean呢?在已知XML的定义的情况下你可以用自带的xjc命令自动生成相对应的JavaBean.如果你用Eclipse,有类似的插件帮你完成这步。具体可以google一下。然后你要做的就是仅仅是使用数据啦。简单的令人发指:JAXBContextjc=JAXBContext.newInstance("com.your.xml.datatype.bean");//先注册你的JavaBean//CreateunmarshallerUnmarshallerum=jc.createUnmarshaller();//UnmarshalXMLcontentsofthefilemyDoc.xmlintoyourJavaobject//instanceObjectFactoryobjFac=newObjectFactory();//生成Bean之后你会有这个工厂类的objFac.createYourData(objFac.createYourDataType());BufferedInputStreambis=newBufferedInputStream(newFileInputStream("your.xml"));//你要怎么打开你的XML文件呢?JAXBElementmyJAXBObject=(JAXBElement)um.unmarshal(bis);//读取YourDataTypeyourData=(YourDataType)myJAXBObject.getValue();//可以用啦//下面是写XML的例子Marshallerm=jc.createMarshaller();m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);Fileoutfile=newFile("yourOutput.xml");BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStr