开发手册 欢迎您!
软件开发者资料库

Java StAX Parser - 修改XML文档

Java StAX Parser修改XML文档 - 从简单和简单的步骤学习Java XML,从基本到高级概念,包括概述,Java XML解析器,DOM解析器,解析XML文档,查询XML文档,创建XML文档,修改XML文档,SAX Parser,JDOM XML Parser,StAX Parser,XPath Parser,DOM4J Parser,XSLT,JAXB。

演示示例

以下是我们需要修改和删除的XML;

         dinkar      kad      dinkar      85               Vaneet      Gupta      vinni      95               jasvir      singh      jazz      90   

StAXModifyDemo.java

package com.it1352.xml; import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.Iterator;import java.util.List;import javax.xml.stream.XMLEventReader;import javax.xml.stream.XMLInputFactory;import javax.xml.stream.XMLStreamConstants;import javax.xml.stream.XMLStreamException;import javax.xml.stream.events.Attribute;import javax.xml.stream.events.StartElement;import javax.xml.stream.events.XMLEvent;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.input.SAXBuilder;import org.jdom2.output.Format;import org.jdom2.output.XMLOutputter;public class StAXModifyDemo {   public static void main(String[] args) {      try {         XMLInputFactory factory = XMLInputFactory.newInstance();         XMLEventReader eventReader = factory.createXMLEventReader(            new FileReader("input.txt"));         SAXBuilder saxBuilder = new SAXBuilder();         Document document = saxBuilder.build(new File("input.txt"));         Element rootElement = document.getRootElement();         List studentElements = rootElement.getChildren("student");         while(eventReader.hasNext()) {            XMLEvent event = eventReader.nextEvent();                        switch(event.getEventType()) {               case XMLStreamConstants.START_ELEMENT:               StartElement startElement = event.asStartElement();               String qName = startElement.getName().getLocalPart();               if (qName.equalsIgnoreCase("student")) {                  Iterator attributes = startElement.getAttributes();                  String rollNo = attributes.next().getValue();                                    if(rollNo.equalsIgnoreCase("393")) {                     //get the student with roll no 393                     for(int i = 0;i < studentElements.size();i++) {                        Element studentElement = studentElements.get(i);                        if(studentElement.getAttribute(                           "rollno").getValue().equalsIgnoreCase("393")) {                           studentElement.removeChild("marks");                           studentElement.addContent(new Element("marks").setText("80"));                        }                     }                  }               }               break;            }         }         XMLOutputter xmlOutput = new XMLOutputter();         // display xml         xmlOutput.setFormat(Format.getPrettyFormat());         xmlOutput.output(document, System.out);      } catch (FileNotFoundException e) {         e.printStackTrace();      } catch (XMLStreamException e) {         e.printStackTrace();      } catch (JDOMException e) {         e.printStackTrace();      } catch (IOException e) {         e.printStackTrace();      }   }}

这会产生以下结果 :

   dinkar   kad   dinkar   80   Vaneet   Gupta   vinni   95   jasvir   singh   jazz   90