2017-07-28 2 views
1

ich arbeite in React native App und einfach versuchen, dieses Stück Code auszuführenXMLParser Fehler geben ‚‘ kann nicht Eigenschaftswert undefined gesetzt ‚‘

fetch('https://ad13.adfarm1.adition.com/banner?sid=3915124&wpt=X.xml') 
.then((response) => response.text()) 
.then((responseJson) => { 
    console.log("WorkingTillHere",responseJson) 
    xml_Img = new XMLParser().parseFromString(responseJson); // Assume xmlText contains the example XML 
    console.log("ParserVideo,",xml_Img); 
}) .catch((error) => { 
    console.log("ParserEx",error); 
}); 

ich in Konsolenfenster sehen

WorkingTillHere

Aber es wird nicht ausgeführt XMLParser().parseFromString(responseJson); und bin immer Konsolprotokoll

ParserEx TypeError: Cannot set property 'value' of undefined

Same Code funktioniert p erfectly in Ordnung mit diesem URL-Link fetch('http://teststream.airtango.de/theo/vast.xml')

+0

Ich denke, Sie sollten eine async aufrufen, um Daten von HTTP-Anfrage zu holen , versuchen, "erwarten fetch" hinzufügen und async vor Ihrer Funktion hinzufügen –

+0

@GaneshCauda - warum? die '.then'-Kette wird aufgerufen, wenn es passend ist –

+0

der einzige Unterschied, den ich in der rohen XML sehen kann ist, dass, wo es funktioniert ** die' 'auf ihren eigenen Zeilen sind - während in den Daten, die fehlschlägt, haben Sie '' in einer Zeile - was ist XMLParser? ist es [dieser] (https://www.npmjs.com/package/react-xml-parser)? –

Antwort

1

reagieren-xml-Parser nicht den

<?xml version="1.0" encoding="UTF-8"?> 

Header nicht versteht. Also, allgemein gesagt, könnte man

fetch('https://ad13.adfarm1.adition.com/banner?sid=3915124&wpt=X.xml') 
.then((response) => response.text()) 
.then((xmlText) => { 
    // remove <?xml ... etc header because react-xml-parser chokes on it 
    if (xmlText.toLowerCase().substr(0,5) == '<?xml') { 
     xmlText = xmlText.split(/\?>\r{0,1}\n{0,1}/).slice(1).join('?>\n'); 
    } 
    console.log("WorkingTillHere",xmlText) 
    xml_Img = new XMLParser().parseFromString(xmlText); // Assume xmlText contains the example XML 
    console.log("ParserVideo,",xml_Img); 
}) .catch((error) => { 
    console.log("ParserEx",error); 
}); 

The above would only catch it if the very first 5 characters are <?xml ... that may be a little naive on my part. However, I believe the authors of react-xml-parser should handle <?xml ... ?> in their code :p

Looking at the source to xmlParser, it seems they DO try to handle it, but obviously fail

Hinweis, Zeile ändern 8 von xmlParse.js von

if (tags[i].indexOf('?xml')) { 

zu

if (tags[i].indexOf('?xml') < 0 && tags[i].length > 0) { 

löst das Problem auch: p

+0

Leider hat es nicht funktioniert .... [Ihr Code] (https://ibb.co/mUoRaQ) und die [Ausgabe ist hier] (https://ibb.co/cxWevQ) –

+0

versuchen, 'xmlParse zu ändern .js' statt ... dass xmlParser auf leeren Zeilen würgt !!! –

+0

Tatsächlich, versuchen Sie die leichte Variante zu dem Code, den ich gerade aktualisiert –

Verwandte Themen