2016-09-01 2 views
1

Ich muss ein XML analysieren, das eine UID kurz vor der XML-Deklaration enthält und daher als ungültig betrachtet wird. Ich habe einen zusätzlichen Schritt hinzugefügt, wo ich Java Pattern/Matcher verwende, um die Zeichenfolge zu finden (es ist eine ID, die aus 10 Ziffern und einem Dollarzeichen besteht) und ersetze sie durch "". Ich muss auch hinzufügen, dass die fragliche Datei. TXT-Erweiterung hat und die Ersetzung erfolgt, bevor es umbenannt wird (ich habe ein kleines Dienstprogramm dafür geschrieben) und gelesen werden, um analysiert zu werden. Hier ist eine Momentaufnahme der XML:Verwenden von Java-Muster und Matcher zum Suchen und Ersetzen von Zeichenfolge vor der XML-Deklaration

UID$<?xml version="1.0" encoding="utf-16"?> 
<RootElement 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns="some-namespace"> 
    <ElementA attribute1a="1123" attribute2a= "3321.67"> 
     <ElementB="" attribute1b="2.46464" attribute2b="1.2345454"></ElementB> 
    </ElementA> 
</RootElement> 

Dies ist die Java-Klasse für das Suchen/Ersetzen-Routine:

import java.io.BufferedReader; 
    import java.io.BufferedWriter; 
    import java.io.File; 
    import java.io.FileReader; 
    import java.io.FileWriter; 
    import java.io.IOException; 
    import java.io.Writer; 
    import java.net.URI; 
    import java.nio.charset.StandardCharsets; 
    import java.nio.file.Files; 
    import java.nio.file.Paths; 
    import java.util.ArrayList; 
    import java.util.List; 
    import java.util.regex.Matcher; 
    import java.util.regex.Pattern; 

    public class FindReplace { 

     public static void main(String[] args) throws IOException { 

      String originalFile = "D:\\invalid.txt"; 
      String outputFile = "D:\\_valid.txt"; 

      String search = "^[0-9]{10}\\$"; 
      String replace = ""; 

      BufferedReader br = new BufferedReader(new FileReader(originalFile)); 
      File newFile = new File(outputFile); 

      Writer writer = new BufferedWriter(new FileWriter(newFile)); 
      String lineContents; 
      while ((lineContents = br.readLine()) != null) { 
       Pattern pattern = Pattern.compile(search); 
       Matcher matcher = pattern.matcher(lineContents); 
       while (matcher.find()) { 
        int count = 0; 
        count++; 
        System.out.println("found: " + count + " : " + matcher.start() + " - " + matcher.end()); 
        String lineByLine = lineContents.replaceAll(search, replace); 
        writer.write(lineByLine); 
        System.out.println("This prints the content line by line: " + lineContents); 
       } 
      } 
      writer.close(); 
      br.close(); 
     } 
    } 

Obwohl die Substitution erfolgreich durchgeführt wird, ich bin nur mit der XML-Deklaration zurückgegeben:

<?xml version="1.0" encoding="utf-16"?> 

wenn der Rest der XML verworfen wird.

Ich bin nicht sicher, warum das passiert, können Sie helfen?

Vielen Dank,

I.

Antwort

2

So möchten Sie die Zeile, die „UID $“ ersetzt werden mit "" und kopieren Sie den Rest des Inhalts der Datei in eine andere Datei enthält (gültig .txt).

Derzeit wo Sie die Datei durchlaufen, überspringen Sie den Rest der Datei; stattdessen können Sie es in die neue Datei schreiben, indem Sie wie folgt refactoring:

Verwandte Themen