Ich schreibe einen Testfall, wo meine Antwort von einem der folgenden beiden Formaten sein könnteRegexMuster Worte zum Abgleichen ohne Bestellung
<Amount currency="USD" xsi:Type="cc:MoneyType">"10.00"</Amount>
oder
<Amount xsi:Type="cc:MoneyType" currency="USD">"10.00"</Amount>
Und mein Code für die Suche nach dem currency
Attribute Wert und den Wert der amount
ist wie folgt,
Pattern pattern = Pattern.compile("<Amount currency=\"(\\S+)\" xsi:type=\"cc:Money\">(\\S+)</Amount>");
Matcher matcher = null;
Double sumOfAmount = 0.0;
String currency = null;
matcher = pattern.matcher(response);
while(matcher.find()) {
currency = matcher.group(1);
sumOfAmount += Double.valueOf(matcher.group(2));
}
Aber diese Kabeljau E funktioniert nur für das erste Format der Antwort, wie soll ich es ändern, um zu arbeiten, um auch dem zweiten Typ des Formats zu entsprechen. Mit anderen Worten, ignorieren Sie die Reihenfolge der Attribute.
Anstelle der String-Analyse mit regulären Ausdrücken können Sie die XML-Deserialisierung verwenden, in der Sie die Klassen Amount und Money definieren. Der Deserializer kümmert sich um das Erstellen von Objekten aus XML und Sie können direkt an Objekten arbeiten. MoneyType kann eine Enumeration sein, wenn Sie möchten –
Sie sollten in Betracht ziehen, einen XML-Parser zu verwenden (qv [hier] (http://stackoverflow.com/questions/11863038/how-to-get-the-attribute-value-of-an- xml-node-using-java)), anstatt zu versuchen, eine komplexe Regex zu schreiben. –