2016-07-23 18 views
0

In Excel-Datei Reihe A hat 8000 Spalten, die xml in jeder Spalte wie unten gezeigt hat. So muss ich die gesamte Datei lesen und schreibe nur phoneNumber, die in jeder Spalte ist.CSV-Datei mit XML-Inhalt lesen und versuchen, nur den Inhalt zu schreiben, den ich benötige. Ich verwende StringTokenizer

OutputElements: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:xxxxxxxx xmlns:ns2="http://webservice.com/"><ns2:xxxxxxx><ns2:xxxxxx>&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;xxxxxxxx;&lt;xxxxxxxxxx keyword="TEXT" phoneNumber="+123456789" pinNumber=123456 /&gt;&lt;/xxxxxxxxxxx&gt;&lt;;</ns2:xxxxxxxxx><ns2:messageType>xxxxxxxxxxxxxxxx</ns2:messageType><ns2:xxxxxxx>3456</ns2:xxxxxxx><ns2:id>xxxxxxx</ns2:id></ns2:xxxxxxxx></ns2:xxxxxxxxx> 

Mein Code:

BufferedReader reader = new BufferedReader(new FileReader(file)); 
    String line = null; 
    String isPhoneNumber ="phoneNumber="; 

     while((line = reader.readLine()) != null){ 
     Matcher matcher = pattern.matcher(isPhoneNumber); 
     StringTokenizer st = new StringTokenizer(line,""); 
     while(st.hasMoreElements() || matcher.equals(isPhoneNumber)){ 
      System.out.println("OutputElements: " +st.nextElement()); 
       } 


     } 
     reader.close(); 

ich die Datei gerade lese. Und ich muss nur die phoneNumber = '123456789' als Ausgabe schreiben. SubString ist in meinen Gedanken und ich brauche auch REGEX, Matchers und Patterns. Kann mir jemand helfen?

+0

Wenn es ein xml ist, warum verwenden Sie keine Parser, ist es schwerer als das. – xTroy

+0

In der Excel-Datei Reihe A hat 8000 Spalten, die xml in jeder Spalte hat. So muss ich die gesamte Datei lesen und schreibe nur phoneNumber. – VBR

Antwort

0

Sie vermissen nicht viel von Ihrem Code außer der Regex. Ich empfehle, mit nur ein Muster und Matcher die Daten eher als eine Teil, herer eine Arbeitsprobe für Sie abrufen:

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.StringTokenizer; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

/** 
* 
* @author dean2191 
*/ 
public class JavaApplication6 { 


    public static void main(String[] args) { 
     try { 
      BufferedReader reader = new BufferedReader(file)); 
      String line = null; 
      String isPhoneNumber ="phoneNumber=\"\\+?[0-9]+\""; 

      while((line = reader.readLine()) != null){ 
       Pattern pattern = Pattern.compile(isPhoneNumber); 
       Matcher matcher = pattern.matcher(line); 
       StringTokenizer st = new StringTokenizer(line,""); 
       int count=0; 
       while(matcher.find()){ 
          count++; 
        System.out.println("Match number " 
           + count); 
      System.out.println(matcher.group()); 

       } 


      } 
      reader.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(JavaApplication6.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

} 

Ich habe die ‚+‘ optional, so dass Sie theoretisch mit ihm fehlend, ohnehin umgehen konnten hoffen Dies hilft, wenn Sie irgendwelche Fragen haben, sei glücklich, zu helfen.

+0

Vielen Dank. – VBR