Mathias Brodala: Daten aus XML-String auslesen

Beitrag lesen

Hallo spross.

ich möchte gerne aus folgendem string:

"<?xml version="1.0"?><asp><ErrorCode>3</ErrorCode><ErrorDescription>Authorization failed</ErrorDescription></asp>"

Den Inhalt zwischen <ErrorCode></ErrorCode> und <ErrorDescription></ErrorDescription> auslesen. ist das mit regex oder so nicht ziemlich einfach?

Kommt darauf an, was du unter „einfach“ verstehst.

leider weiss ich überhaupt nicht wie ich mit regex umgehen muss.

Ein meiner Meinung nach sehr gutes Tutorial zu regulären Ausdrücken gibt es beim RegExp-Evaluator.

Dein Ausdruck könnte sich wie folgt aufbauen:

<ErrorCode> – die einfache Zeichenkette „<ErrorDescription>“
    ([0-9]+) – Eine Zahl von 0 bis 9, einmal oder beliebig oft
</ErrorCode> – die einfache Zeichenkette „</ErrorDescription>“

(Solltest du genau wissen, dass die Zahl bspw. nur ein- oder zweistellig ist, kannst du den Ausdruck hier natürlich anpassen.)

Dies würde also in folgendem Ausdruck resultieren:

var regex = /<ErrorCode>([0-9]+)<\/ErrorCode>/;  
var xml = '<?xml version="1.0"?><asp><ErrorCode>3</ErrorCode><ErrorDescription>Authorization failed</ErrorDescription></asp>';  
  
var result = regex.[ref:self811;javascript/objekte/regexp.htm#exec@title=exec](xml);  
  
alert(result[1]); // 3

Eine alternative Lösung ohne einen regulären Ausdruck könnte dagegen wie folgt aussehen:

var xml = '<?xml version="1.0"?><asp><ErrorCode>3</ErrorCode><ErrorDescription>Authorization failed</ErrorDescription></asp>';  
var s1 = '<ErrorCode>';  
var start = xml.[ref:self811;javascript/objekte/string.htm#index_of@title=indexOf](s1);  
var end = xml.indexOf('</ErrorCode>');  
  
if (start != -1 && end != -1) { // Wenn überhaupt gefunden  
  
  /* Fundstelle von „<ErrorCode>“ + Länge dessen bis Fundstelle von  
     „</ErrorCode>“ extrahieren */  
  var result = xml.[ref:self811;javascript/objekte/string.htm#substring@title=substring](start + s1.[ref:self811;javascript/objekte/string.htm#length@title=length], end);  
  
  alert(result); // 3  
}

Welche Methode du nun anwendest ist eigentlich egal. Nur ist hier wieder gut erkennbar, dass es nicht immer eines regulären Ausdrucks bedarf.

Einen schönen Sonntag noch.

Gruß, Mathias

--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
debian/rules