content: package edu.stanford.rsl.tutorial.mammography.inbreast;
  
  import java.io.FileInputStream;
  import java.io.FileNotFoundException;
  import java.util.ArrayList;
  import java.awt.Polygon;
  
  import javax.xml.xpath.XPathConstants;
  import javax.xml.xpath.XPathExpressionException;
  import javax.xml.xpath.XPathFactory;
  
  import org.w3c.dom.NodeList;
  import org.xml.sax.InputSource;
  
  import edu.stanford.rsl.tutorial.mammography.Mammogram;
  import edu.stanford.rsl.tutorial.mammography.Mammogram.Findings;
  import ij.gui.PolygonRoi;
  import ij.gui.Roi;
  
  public class XMLparser {
  
  	String[] rawData = null;
  	ArrayList<Roi> rois = null;
  	ArrayList<Findings> findings = null;
  
  	public static void main(String[] args) throws XPathExpressionException,
  			FileNotFoundException {
  
  		String xmldat = "D:/Data/INbreast/ALLXML/53586960.xml";
  		XMLparser parse = new XMLparser();
  		parse.readXml(xmldat);
  		
  		System.out.println("debug point");
  	}
  
  	public void readXml(String file) throws XPathExpressionException,
  			FileNotFoundException {
  		this.rawData = parseXmlFile(file);
  		decodeRawData();
  	}
  
  	private void decodeRawData() {
  		ArrayList<Roi> rois = new ArrayList<Roi>();
  		ArrayList<Findings> findings = new ArrayList<Findings>();
  		
  		int numComponents = Integer.parseInt(rawData[0]);
  		
  		int pos = 1;
  		for(int i = 1; i < numComponents; i++){
  			String fndg = rawData[pos];
  			for(Findings f : Findings.values()){
  				String[] vals = f.getValue();
  				// make sure its not the "all" value
  				if(vals.length > 1){
  					break;
  				}
  				if(fndg.equals(f.getValue()[0])){
  					findings.add(f);
  					break;
  				}
  			}
  			pos++;
  			int numPolygonPoints = Integer.parseInt(rawData[pos]);
  			pos++;
  			int[] x = new int[numPolygonPoints];
  			int[] y = new int[numPolygonPoints];
  			for(int j = 0; j < numPolygonPoints; j++){
  				String coordPair = rawData[pos];
  				String[] split = coordPair.split(",");
  				x[j] = (int)Double.parseDouble(split[0].substring(1));
  				y[j] = (int)Double.parseDouble(split[1].substring(0,split[1].length()-1));
  				pos++;
  			}
  			Polygon poly = new Polygon(x,y,numPolygonPoints);
  			PolygonRoi roi = new PolygonRoi(poly, Roi.POLYGON);
  			rois.add(roi);
  		}
  		this.rois = rois;
  		this.findings = findings;		
  	}
  	
  	public ArrayList<Roi> getRois(){
  		return this.rois;
  	}
  
  	public ArrayList<Findings> getFindings(){
  		return this.findings;
  	}
  	private String[] parseXmlFile(String pfad) throws XPathExpressionException,
  			FileNotFoundException {
  
  		try {
  			InputSource xml = new InputSource(new FileInputStream(pfad));
  			// Hier passiert Magie! Mit anderen Worten ein kleines Wunder!
  			String expression = "/plist/dict/array/dict/array/dict/key[text()=\"Name\"]/following-sibling::*[1]|" // Name
  																													// des
  																													// Finding
  					+ "/plist/dict/array/dict/array/dict/key[text()=\"Point_px\"]/following-sibling::*[1]/child::*|" // Die
  																														// XY
  																														// Koordinaten
  					+ "/plist/dict/array/dict/integer[2]|" // Anzahl der ROIs
  					+ "/plist/dict/array/dict/array/dict/key[text()=\"NumberOfPoints\"]/following-sibling::*[1]"; // Anzahl
  																													// der
  																													// XY
  																													// Koordinaten
  
  			NodeList ding = (NodeList) XPathFactory.newInstance().newXPath()
  					.evaluate(expression, xml, XPathConstants.NODESET);
  
  			String[] array = new String[ding.getLength()];
  
  			for (int i = 0; i < ding.getLength(); i++) {
  				array[i] = ding.item(i).getTextContent();
  			}
  
  			return array;
  
  		} catch (XPathExpressionException e) {
  			// TODO Auto-generated catch block
  			throw e;
  		} catch (FileNotFoundException e) {
  			// TODO Auto-generated catch block
  			throw e;
  		}
  	}
  }