📜  StAX分析器-修改XML文档

📅  最后修改于: 2020-11-10 04:40:53             🧑  作者: Mango


示范范例

为了运行此示例,您应在应用程序的类路径中包含jdom.jar。下载jdom-2.0.5.zip。

这是我们需要修改的XML-



   
      Dinkar
      Kad
      Dinkar
      85
   
   
   
      Vineet
      Gupta
      Vinni
      95
   
   
   
      Jasvir
      Singh
      Jazz
      90
   

示范范例

StAXModifyDemo.java

package com.tutorialspoint.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



   Vineet
   Gupta
   Vinni
   95



   Jasvir
   Singh
   Jazz
   90