daten aus xml string auslesen
spross
- javascript
hallo zusammen
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? leider weiss ich überhaupt nicht wie ich mit regex umgehen muss.
kann mir da jemand helfen?
vielen dank!
gruss spross
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
Hallo nochmal.
<ErrorCode> – die einfache Zeichenkette „<ErrorDescription>“
([0-9]+) – Eine Zahl von 0 bis 9, einmal oder beliebig oft
</ErrorCode> – die einfache Zeichenkette „</ErrorDescription>“
Natürlich so:
<ErrorCode> – die einfache Zeichenkette „<ErrorCode>“
([0-9]+) – Eine Zahl von 0 bis 9, einmal oder beliebig oft
</ErrorCode> – die einfache Zeichenkette „</ErrorCode>“
Einen schönen Sonntag noch.
Gruß, Mathias
Tach 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? leider weiss ich überhaupt nicht wie ich mit regex umgehen muss.
Würde ich nicht als erste Wahl ansehen.
Liegt evtl. bereits ein DOM-Objekt (aus einem XMLHttpRequest) vor? Dann gleich mittels DOM-Methoden rangehen oder aus dem String zunächst ein DOM-Objekt erzeugen:
var xmldoc=null, xmlstr='<?xml version="1.0"?><asp><ErrorCode>3</ErrorCode><ErrorDescription>Authorization failed</ErrorDescription></asp>';
if(window.ActiveXObject)
{
xmldoc=new ActiveXObject("Microsoft.XMLDOM");
xmldoc.loadXML(xmlstr);
}
else if(window.DOMParser)
{
var xmldoc=(new DOMParser()).parseFromString(xmlstr,"text/xml");
}
if(xmldoc)
{
var ErrorCode=xmldoc.getElementsByTagName("ErrorCode").item(0).firstChild.nodeValue;
var ErrorDescription=xmldoc.getElementsByTagName("ErrorDescription").item(0).firstChild.nodeValue;
alert("ErrorCode: "+ErrorCode+"\nErrorDescription: "+ErrorDescription);
}
else alert("XML-Objekt konnte nicht erzeugt werden.");
Man liest sich,
svg4you