<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">package lecture_en;
/*
 * Created on 2004-11-29
 */
import java.io.FileInputStream;
import java.io.FileNotFoundException;

import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;

/**
 * @author Patryk Czarnik
 */
public class StaffStax1 {
  private static XMLStreamReader reader;

  public static void main(String[] args) {
    StaffStax1 app = new StaffStax1();
    app.run(args);
  }
  
  public void run(String[] args) {
    if(args.length &lt; 1) {
      System.out.println("Too few args");
      return;
    }
    
    int result = 0;
    
    try {
      XMLInputFactory factory = XMLInputFactory.newInstance();
      reader = factory.createXMLStreamReader(new FileInputStream(args[0]));
      
      while(reader.hasNext()) {
        int eventType = reader.next();
        if(eventType == XMLStreamConstants.START_ELEMENT) {
          if("person".equals(reader.getLocalName())) {
            String attrVal = reader.getAttributeValue(null,"position");
            if("specialist".equals(attrVal)) {
              result += this.processPerson();
            }
          }
        }
      }
      reader.close();
    } catch (IllegalArgumentException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (FactoryConfigurationError e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (XMLStreamException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    System.out.println("Result: "+result);
  }

  private int processPerson() throws XMLStreamException {
	int result = 0;
	
    while(reader.hasNext()) {
      int eventType = reader.next();
      switch(eventType) {
      case XMLStreamConstants.START_ELEMENT :
        if("salary".equals(reader.getLocalName())) {
         String val = reader.getElementText();
            try {
              result += Integer.parseInt(val);
            } catch (NumberFormatException e) {
            }
          }
      break;
      case XMLStreamConstants.END_ELEMENT :
        if("person".equals(reader.getLocalName())) {
        	return result;
        }
      break;
      }
    }
    return result;
  }
}
</pre></body></html>