# XML-Datei lesen und als String speichern



## cologna77 (20. Januar 2010)

ich muss doch ein datei lesen mit eine methode public readXml(String fname){}
 public void readFromFile(String filename) {

       // BufferedInputStream bufferedInput = null;
       // byte[] buffer = new byte[4024];
    	Vector dat = new Vector();
        try {
            String zeile;

            f= new File(filename);
			fr = new FileReader(f);
			br = new BufferedReader(fr);
		     zeile=br.readLine().trim();

            zeile= br.readLine().trim();

            while( zeile!="</ERgebnis>"){

    			if(zeile.charAt(1)=='E'){



    				int begin = zeile.indexOf("=")+3;
    				int ende = zeile.length()-3;
    				 String sub = zeile.substring(begin,ende);
    				System.out.println(sub);
    				person.setInfo(0, br.toString());
    				dat.add(person);
    			}
            }
            while(zeile!="</TrainingSet>")
			{
				if(zeile.charAt(1)=='T'){

			zeile = br.readLine().trim();
			dat.add(person);
			int begin = zeile.indexOf("=")+3;
			int ende = zeile.length()-3;
		String	sub = zeile.substring(begin,ende);
			System.out.println(" "+sub);
			person.setInfo(1, br.toString());
			dat.add(person);
			}
			}

              zeile = br.readLine().trim();
            dat.add(person);

			br.close();
			}

			catch (FileNotFoundException fnfe)//
			{
				fnfe.printStackTrace();
				System.exit(0);
			System.out.println("Datei nicht gefunden");
			}
			catch(IOException e)
			{
			System.out.println("Fehler beim Lesen der Datei");
			}




wie kann man ein xml-datei lesen und in einem vector speicher die ausgabe soll zum Beispiel so sein:

1 1
1 2
1 3
1 4
1 5
...
.
.
.
1 45

2 1
2 2
2 3
2 4
2 5
2 6
....
.
.
.
2 45.


fname= "MyXmlFile.xml";
public String readXML(String fname){}
und das ist die xml-datei:
<?xml version='1.0' encoding='utf-8'?><!-- MyXmlFile.xml -->

<GUI-Description>

<ERgenis index ="1">
-<TrainningSet setIndex ="1>
<erro>0.000344</error>
<TrainningSet/>

-<TrainningSet setIndex ="2">
<erro>0.0003487</error>
<TrainningSet/>

-<TrainningSet setIndex ="3">
<erro>0.0013487</error>
<TrainningSet/>

-<TrainningSet setIndex ="4">
<erro>0.0010487</error>
<TrainningSet/>
.
.
.
-<TrainningSet setIndex ="45">
<erro>0.0313487</error>
<TrainningSet/>


</ERgebnis>

- <ERgenis index ="2">
-<TrainningSet setIndex ="1>
<erro>0.000344</error>
<TrainningSet/>

-<TrainningSet setIndex ="2">
<erro>0.0003487</error>
<TrainningSet/>

-<TrainningSet setIndex ="3">
<erro>0.0013487</error>
<TrainningSet/>

-<TrainningSet setIndex ="4">
<erro>0.0010487</error>
<TrainningSet/>
.
.
.
-<TrainningSet setIndex ="45">
<erro>0.0313487</error>
<TrainningSet/>


</ERgebnis>

<GUI-Description/>
hat jeamnden eine Idee?

meine klasse heisst:


    public ERgebnis(int Index){
	  /*The constructor for an EpochResult instance. 
	   * A positive epoch index should be provided; 
	   * otherwise, though the EpochResult instance
	   *  will be created, the repository will not
	   *   treat it as a valid instance.
         The instance will be initialized.

      Parameters:
           epochIndex - the epoch index. Should not be 0 or negative.*/

	  if(epochIndex <= 0)
		  epochIndex = STANDARD_VALUE;
	  this.epochIndex= epochIndex; 

   }

  public int getIndex(){
	  /*    Retrieve the epoch index of this instance. Only positive integer values are
	   *  valid epoch indices. A zero return value indicates that this instance has not
	   *   yet been given a proper epoch index; this typically happens if a constructor 
	   *   call with invalid epochIndex value has been invoked.

    Returns:
        the epoch index of this instance
      */
	  if(epochIndex >0)

	  return  epochIndex;

  }

  public void setIndex(int newIndex){
	  /*    Set the epoch index. Only positive values are allowed.
	   *  In case a negative or zero value is provided to this method, 
	   *  nothing will change within this instance.

    Parameters:
        newIndex - the  index value to be set*/

	  Index = newIndex ;
  }
  public int[] getTrainingResultSetIndices( int setIndex){
	  /*    Retrieve the list of setIndex values of all training result sets available in this epoch.
	   *  They are returned as an integer array. Note, that the setIndex values appear unsorted
	   *   in any order (as they have been entered into the epoch). Note also, that this only means 
	   *   there is at least one of the following information items available for that setIndex: a 
	   *   set name, an output error, an output data set, and/or a resulting net configuration.
          If there are none (yet), an array of length 0 is returned.

    Returns:
        array with setIndex values available in this epoch.

*/

  }
hat jemanden eine idee? danke im voraus!


----------



## Kai008 (20. Januar 2010)

Ich verstehe die XML-Datei zwar nicht (glaube aber, dass sie in Zeile 9 einen Fehler enthält) aber sieht so aus, als müsstest du die Zeilen einfach so wie HTML in Wertnamen und Wert zerlegen.
Den Source kapiere ich irgendwie auch nicht. Du definierst einen Buffer, verwendest ihm aber nicht. Zudem hat er eine seltsame Länge, und konstanten sollte man möglich nicht direkt verwenden, diesen aber keinesfalls.

Keine Ahnung, wie sich der Vector zusammensetzt, aber ließ das ganze doch in einen Buffer von der Länge der XML-Datei, gehe zeichenweiß durch, bis du gewissen Codes findest (< ignorieren, bis zum nächsten Space = Irgendwas, bis zum "ist gleich" = Variablenname, "ist gleich" überspringen, bis zum "ist gleich" Variablenwert, bis zum 13 10 durchrennen, danach von vorne.


----------



## cologna77 (28. Januar 2010)

jghaghfasjghfakjshfkjah


----------



## cologna77 (3. Februar 2010)

ich bekomme jedes mal diese meldung:

```
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Vector
	at javax.swing.table.DefaultTableModel.justifyRows(Unknown Source)
	at javax.swing.table.DefaultTableModel.setDataVector(Unknown Source)
	at javax.swing.table.DefaultTableModel.<init>(Unknown Source)
	at javax.swing.JTable.<init>(Unknown Source)
	at AnnDataRespository.main(AnnDataRespository.java:157)
```
 
 ich lesen ein xml-datei  und speichere das in txt-datei.und durch den vector speicher alle daten in einem Jtable.
kann jemand mir helfen.

```
public class AnnDataRespository {
	//private  String fname = "NewDataRepoContent.xml";
	 private int trainingResultSets;
	  private int epochIndex;
	  private int setIndex;
	  int STANDARD_VALUE;
	private int[] info = new int[10];
	//private Person person;
	//private StringBuffer buf = new StringBuffer();
	
	//String tag ="</Layer>";
	String ausgabe = null;
	String ausgabe1 = null;
	String Text = null;
	 Vector data = new Vector();
	String Text1 = null;
	String Text3 = null;
	
	String Next = null;
	int laenge1 = 0;
	
	int laenge2 = 0;
	int laenge3 = 0;
	int laenge4 = 0;
	int laenge5 = 0;
	int laenge6 = 0;
	String tag ="";
	
 
	//public String readFromXML(String tag,String tag1,String fname)throws java.io.FileNotFoundException, java.io.IOException{
	/*--------------------------------------------------------------------------------------------------------------------------
	 * 
	 * das ist methode readFromXML();
	 * 
	 * 
	 * --------------------------------------------------------------------------------------------------------------------------*/
	public String readFromXML(String tag,String tag1,String tag2,String fname)throws 
	java.io.FileNotFoundException, java.io.IOException{
		Vector data = new Vector();
		 //String ausgabe[] = new String[3000];
		BufferedReader b2 = new BufferedReader(new FileReader ("D:/workspace/diplom/streams.txt"));
		while ((fname = b2.readLine()) != null)
		{
		    BufferedReader b1 = new BufferedReader(new FileReader (fname));
		  
		    	 Text=b1.readLine().trim(); 
		  while ((Text = b1.readLine()) != null ) {
			 int i=0;
		           Next = Text.trim();
					laenge1 = Next.length()-1;
					laenge2 = tag.length()+15;
					int ende3 = laenge1-1 ; 

					  if (Text.contains(tag)) {
						  ausgabe += Next.substring(laenge2, ende3);
						  data.add(ausgabe);  
						 // i++;
					  }
					  		 	  
		    Next = Text.trim();
				laenge3 = Next.length()-1;
				laenge4 = tag1.length()+11;
				int ende1 = laenge3-1 ; 

				if (Text.contains(tag1)) {
					ausgabe += Next.substring(laenge4, ende1); 
					data.add(ausgabe);
					//System.out.println(ausgabe);
					//i++;
					}	
				Next = Text.trim();
		        // tag2 ="SumOfSquares";
			     laenge5 = Next.length()-1;
			     laenge6 = tag2.length()+15;
			     int ende2 = laenge5-7 ; 

			 if (Text.contains(tag2)) {
				ausgabe += Next.substring(laenge6, ende2); 
				data.add(ausgabe);
				//System.out.println(ausgabe);
				//i++;
				}
			
			//PID = Integer.parseInt (line.substring (start, end)); 
			 //i++;
			 
		 }	
		  
				}
		
		
			return ausgabe ;
  }
		
	
	
	public static void main(String args[]) throws java.io.IOException {
		
		Vector data = new Vector();
		Vector title = new Vector();
		Vector rowA = new Vector();
		String fname = null;
		Serializable fails = (new AnnDataRespository(1).readFromXML("epochIndex","TrainingResultSet
","SumOfSquares",fname) + " | ");
		
		
		
		
		
		//for(int i=0; i<fails.length; i++){
		//rowA.add(fails[i]);
		
		//data.add( rowA );
		//}  
		data.add(fails);
		
		title.add( "epochIndex" );
		title.add( "TrainingResultSet " );
		title.add( "weights" );
		title.add( "Error" );
		//String  fails[] = new AnnDataRespository(1).readFromXML("epochIndex","TrainingResultSet ","SumOfSquares",fname);
		
		// Das JTable initialisieren
		JTable table = new JTable(  data, title );// hier ist das fehler---------157-----------------------<<<<157
		JFrame frame = new JFrame( "Demo" );
		frame.getContentPane().add( new JScrollPane( table ) );
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.pack();
		frame.setVisible( true );
		
		
		
		
		PrintWriter p = new PrintWriter(new FileWriter("D:/workspace/diplom/ausgabe.txt"));
		BufferedReader b = new BufferedReader(new FileReader ("D:/workspace/diplom/streams.txt"));
		//String fname;
		//String tag2 ="<Error type=SumOfSquares>";
		while ((fname = b.readLine()) != null)
		{
	   //p.print(new AnnDataRespository().readFromXML("epochIndex",fname) + ", ");
	  
	    
			p.print(new AnnDataRespository(1).readFromXML("epochIndex","TrainingResultSet ","SumOfSquares",fname) + " | ");
		//p.print(new AnnDataRespository().readFromXML("epochIndex","TrainingResultSet ",fname) + " ,");
		
		
		
		//p.print(new AnnDataRespository().readFromXML("TrainingResultSet",fname)+ LINE_SEPARATOR);
	//	data.add(new AnnDataRespository(1).readFromXML("epochIndex","TrainingResultSet ","SumOfSquares",fname));
		p.println();
		p.flush();
		p.close();
		
		}
		
	}
```
 

	danke im voraus.


----------



## zer0 (3. Februar 2010)

Vielleicht mal die Formatierung Tags verwenden.


----------



## Tomek_FFM (3. Februar 2010)

Die JTable hat keinen Konstruktor für Deine Parameter Vector (data) und String (title), siehe http://java.sun.com/javase/6/docs/api/javax/swing/JTable.html.


----------



## cologna77 (4. Februar 2010)

danke für die Antwort ,
hat jemand ein beispiel wie man eine tabelle  mit daten erfüllt ,erstellt.
ich brauche das bitte
danke im voraus


----------



## zer0 (4. Februar 2010)

Hi!

Schau mal hier!


----------



## cologna77 (5. Februar 2010)

hallo  nochmal .ich habe jetzt ein problem beim  Jtable-erstellung .ich habe eine methode die xml einliest von typ string ,ich habe  gelesene Daten in einem Vector .und Konstruktor von Jtable (object[][],String[])und ich habe noch ein Methode int [] getTsetIndix()die die liste(werte) aller Training zurück.
hat jemand eine idee.?
danke im voraus.


----------

