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

SAX Parser - 修改XML文档

用于修改XML文档的Apache Xerces SAX解析器 - 从简单和简单的步骤学习Apache Xerces,从基本到高级概念,包括概述,Apache Xerces XML解析器,DOM解析器,解析XML文档,查询XML文档,创建XML文档,修改XML Document,SAX Parser,StAX Parser。

演示示例

以下是我们需要修改的输入xml文件,方法是在结尾处附加< Result> Pass< Result/> 标签.

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

SAXModifyDemo.java

package com.it1352.XML; import java.io.*;import org.xml.sax.*;import javax.xml.parsers.*;import org.xml.sax.helpers.DefaultHandler;public class SAXModifyDemo extends DefaultHandler {   static String displayText[] = new String[1000];   static int numberLines = 0;   static String indentation = "";   public static void main(String args[]) {      try {         File inputFile = new File("input.txt");         SAXParserFactory factory =          SAXParserFactory.newInstance();         SAXModifyDemo obj = new SAXModifyDemo();         obj.childLoop(inputFile);         FileWriter filewriter = new FileWriter("newfile.xml");         for(int loopIndex = 0; loopIndex < numberLines; loopIndex++){            filewriter.write(displayText[loopIndex].toCharArray());            filewriter.write('\n');            System.out.println(displayText[loopIndex].toString());         }         filewriter.close();      } catch (Exception e) {         e.printStackTrace(System.err);      }   }   public void childLoop(File input){      DefaultHandler handler = this;      SAXParserFactory factory = SAXParserFactory.newInstance();      try {         SAXParser saxParser = factory.newSAXParser();         saxParser.parse(input, handler);      } catch (Throwable t) {}   }   public void startDocument() {      displayText[numberLines] = indentation;      displayText[numberLines] += "";      numberLines++;   }   public void processingInstruction(String target, String data) {      displayText[numberLines] = indentation;      displayText[numberLines] += " 0) {         displayText[numberLines] += ' ';         displayText[numberLines] += data;      }      displayText[numberLines] += "?>";      numberLines++;   }   public void startElement(String uri, String localName,      String qualifiedName, Attributes attributes) {      displayText[numberLines] = indentation;      indentation += "    ";      displayText[numberLines] += '<';      displayText[numberLines] += qualifiedName;      if (attributes != null) {         int numberAttributes = attributes.getLength();         for (int loopIndex = 0; loopIndex < numberAttributes;            loopIndex++){            displayText[numberLines] += ' ';            displayText[numberLines] += attributes.getQName(loopIndex);            displayText[numberLines] += "=";            displayText[numberLines] += attributes.getValue(loopIndex);            displayText[numberLines] += '"';         }      }      displayText[numberLines] += '>';      numberLines++;   }   public void characters(char characters[], int start, int length) {      String characterData = (new String(characters, start, length)).trim();      if(characterData.indexOf("\n") < 0 && characterData.length() > 0) {         displayText[numberLines] = indentation;         displayText[numberLines] += characterData;         numberLines++;      }   }   public void endElement(String uri, String localName, String qualifiedName) {      indentation = indentation.substring(0, indentation.length() - 4);      displayText[numberLines] = indentation;      displayText[numberLines] += "';      numberLines++;      if (qualifiedName.equals("marks")) {         startElement("", "Result", "Result", null);         characters("Pass".toCharArray(), 0, "Pass".length());         endElement("", "Result", "Result");      }   }}

上述程序将产生以下结果 :

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