takidoso
Erfahrenes Mitglied
Hallo und Halli,
ich habe auf grund eines Phänomens ein Testprogramm gebaut, welches ein bischen replaceAll tut.
Ziel ist es die Namespace-angaben aus sowohl den Start als auch den EndeTags im XML-Teilstring zu entfernen.
hier die Ausgabe:
<ar:CdtrSchmeId><bb3.1.2:Id><bb3.1.2
rvtIdZ><bb3.1.2:Othr><bb3.1.2:Id>DE09ZZZ00000000001</bb3.1.2:Id><bb3.1.2:SchmeNm><bb3.1.2
rtry>SEPA</bb3.1.2
rtry></bb3.1.2:SchmeNm></bb3.1.2:Othr></bb3.1.2
rvtId></bb3.1.2:Id></ar:CdtrSchmeId>
<ar:CdtrSchmeId><bb3.1.2:Id><bb3.1.2
rvtIdZ><bb3.1.2:Othr><bb3.1.2:Id>DE09ZZZ00000000001</Id><bb3.1.2:SchmeNm><bb3.1.2
rtry>SEPA</Prtry></SchmeNm></Othr></PrvtId></Id></CdtrSchmeId>
<CdtrSchmeId><Id><PrvtIdZ><Othr><Id>DE09ZZZ00000000001<SchmeNm><Prtry>SEPA</Prtry></SchmeNm></Othr></PrvtId></Id></CdtrSchmeId>
----
<bb3.1.2:Othr><bb3.1.2:Id>DE09ZZZ00000000001</bb3.1.2:Id><bb3.1.2:SchmeNm><bb3.1.2
rtry>SEPA</bb3.1.2
rtry></bb3.1.2:SchmeNm></bb3.1.2:Othr>
<bb3.1.2:Othr><bb3.1.2:Id>DE09ZZZ00000000001</Id><bb3.1.2:SchmeNm><bb3.1.2
rtry>SEPA</Prtry></SchmeNm></Othr>
<Othr><Id>DE09ZZZ00000000001<SchmeNm><Prtry>SEPA</Prtry></SchmeNm></Othr>
----
<bb3.1.2:Id>DE09ZZZ00000000001</bb3.1.2:Id>
<bb3.1.2:Id>DE09ZZZ00000000001</Id>
<Id>DE09ZZZ00000000001</Id>
----
nur die letzte Ausgabe ist wie erwartet.
bei den anderen beiden oben fehlt das Ende-Tag von <ID>
Sieht aus meiner Sicht zunächst aus wie ein Bug!
Wie kann man sich das erklären?
Gäbe es dazu einen Workaround? Wer kennt eine bessere Regex-Formulierung, die mir das gewünschte ergebnis gibt?
mit amkopfkratzenden Grüßen
Takidoso
ich habe auf grund eines Phänomens ein Testprogramm gebaut, welches ein bischen replaceAll tut.
Ziel ist es die Namespace-angaben aus sowohl den Start als auch den EndeTags im XML-Teilstring zu entfernen.
Java:
public class ReplaceAllTest
{
static private void multiReplaceAll(String inputString, String regex[], String replacement[])
{
for (int i=0; i<regex.length; i++)
{
System.out.println(inputString);
inputString = inputString.replaceAll(regex[i], replacement[i]);
}
System.out.println(inputString);
System.out.println("----");
}
static public void main (String[] args)
{
//String inputString = "<bb3.1.2:Id>DE09ZZZ00000000001</bb3.1.2:Id>";
String inputString = "<ar:CdtrSchmeId><bb3.1.2:Id><bb3.1.2:PrvtIdZ><bb3.1.2:Othr><bb3.1.2:Id>DE09ZZZ00000000001</bb3.1.2:Id><bb3.1.2:SchmeNm><bb3.1.2:Prtry>SEPA</bb3.1.2:Prtry></bb3.1.2:SchmeNm></bb3.1.2:Othr></bb3.1.2:PrvtId></bb3.1.2:Id></ar:CdtrSchmeId>";
String[] regex = new String[] {"</.*?:","<.*?:"};
String[] replacement = new String[] {"</","<"};;
multiReplaceAll(inputString, regex, replacement);
inputString = "<bb3.1.2:Othr><bb3.1.2:Id>DE09ZZZ00000000001</bb3.1.2:Id><bb3.1.2:SchmeNm><bb3.1.2:Prtry>SEPA</bb3.1.2:Prtry></bb3.1.2:SchmeNm></bb3.1.2:Othr>";
multiReplaceAll(inputString, regex, replacement);
inputString = "<bb3.1.2:Id>DE09ZZZ00000000001</bb3.1.2:Id>";
multiReplaceAll(inputString, regex, replacement);
}
}
hier die Ausgabe:
<ar:CdtrSchmeId><bb3.1.2:Id><bb3.1.2




<ar:CdtrSchmeId><bb3.1.2:Id><bb3.1.2


<CdtrSchmeId><Id><PrvtIdZ><Othr><Id>DE09ZZZ00000000001<SchmeNm><Prtry>SEPA</Prtry></SchmeNm></Othr></PrvtId></Id></CdtrSchmeId>
----
<bb3.1.2:Othr><bb3.1.2:Id>DE09ZZZ00000000001</bb3.1.2:Id><bb3.1.2:SchmeNm><bb3.1.2


<bb3.1.2:Othr><bb3.1.2:Id>DE09ZZZ00000000001</Id><bb3.1.2:SchmeNm><bb3.1.2

<Othr><Id>DE09ZZZ00000000001<SchmeNm><Prtry>SEPA</Prtry></SchmeNm></Othr>
----
<bb3.1.2:Id>DE09ZZZ00000000001</bb3.1.2:Id>
<bb3.1.2:Id>DE09ZZZ00000000001</Id>
<Id>DE09ZZZ00000000001</Id>
----
nur die letzte Ausgabe ist wie erwartet.
bei den anderen beiden oben fehlt das Ende-Tag von <ID>
Sieht aus meiner Sicht zunächst aus wie ein Bug!
Wie kann man sich das erklären?
Gäbe es dazu einen Workaround? Wer kennt eine bessere Regex-Formulierung, die mir das gewünschte ergebnis gibt?
mit amkopfkratzenden Grüßen
Takidoso
Zuletzt bearbeitet: