XML宣言の直前のUIDを含むXMLを解析する必要があるため、無効と見なされます。私は文字列(それは10桁とドル記号で構成されるID)を見つけて""に置き換えるためにJava Pattern/Matcherを使用する追加ステップを含んでいます。問題のファイルの拡張子が.txtであり、名前が変更される直前に置換が行われる(私は小さなユーティリティを書きました)と解析されるように読み込まれることを追加する必要があります。ここでXMLのスナップショットです:Java PatternとMatcherを使用してXML宣言の前に文字列を検索し置換する
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>
これは、検索/ルーチン置き換えるためのJavaクラスです:
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();
}
}
置換が正常に実行されているが、私は唯一のXML宣言で返されています:
<?xml version="1.0" encoding="utf-16"?>
残りのXMLが破棄される場合。
なぜこれが起こっているのかわかりません。お手伝いできますか?
は、有効な(だから、「UIDの$」を含む行は""
に置き換えることにしたいと、別のファイルにファイルの内容の残りの部分をコピー
I.