2017-07-06 2 views
-2

Ich stieß auf ein Problem in meinem Projekt, wo die Werte von XML-Knoten als undefined in IE11 zurückgegeben wurden, während sie als die erwarteten gültigen Werte in allen anderen Browsern einschließlich Edge zurückgegeben wurden.Welche Methode sollte zum Lesen von XML-Daten in JavaScript verwendet werden?

Um die Werte zu erhalten, die ich verwendete .innerHTML und nach einiger Forschung, fand ich heraus, dass .innerHTML funktioniert nicht in IE11 und das technisch sollte es nicht verwendet werden, um XML-Knoten Werte an erster Stelle zu lesen.

Ich fand ein paar Lösungen, die mir alle hacky erschienen, weil sie verschiedene Methoden zum Lesen von XML-Daten für verschiedene Browser (auch bekannt als IE11 und alles andere) vorschlugen. Ich dachte mir, dass es eine Standardmethode zum Lesen von XML-Daten geben muss, die in allen Browsern funktionieren würde, da das Parsen von XML extrem häufig ist und keine obskure Praxis ist, die unterschiedliche Implementierungen in verschiedenen Browsern hätte.

Endlich habe ich ein Video gefunden, in dem ein Typ .firstChild.data zum Lesen von XML-Knotenwerten erklärt hat. Ich habe das in meinem Projekt implementiert und scheint über alle Browser hinweg zu funktionieren. Das ist das einzige Mal, dass ich auf diese Methode stoße. Überall sonst sah ich vorgeschlagen mit .text(), .innerHTML oder .textContent (für IE11).

Gibt es einen Grund, warum .firstChild.data nicht oder nicht verwendet werden sollte und gibt es andere Methoden, die Cross-Browser-kompatibel sind, die vorzuziehen sind?

+2

Zeigen Sie uns den Code, den Sie haben Probleme mit – charlietfl

+1

Bitte bearbeiten Sie Ihre Frage, um den Code, den Sie bisher geschrieben und einige Beispieldaten enthalten. –

+0

Ich habe eigentlich keine Probleme mit dem Code mehr, wie ich in dem Body sagte, wo ich schrieb: "Ich habe das in meinem Projekt implementiert und es scheint über alle Browser hinweg zu funktionieren." –

Antwort

1

Wenn die firstChild eine text node ist, dann möchten Sie nodeValue verwenden, um auf seinen Textinhalt zuzugreifen. Siehe auch die textContent Eigenschaft.

Die firstChild kann jedoch kein Textknoten sein, abhängig von Ihren Daten. Zum Beispiel dieses XML-Dokument gegeben ...

<root><a><b>foo</b> bar</a></root> 

... die firstChild des <a> Elements ist ein Element mit Textknoten Kind. Sie möchten also nicht firstChild verwenden, um den Textknoten zu finden.

Ferner ist data spezifisch für CharacterData Schnittstelle. Wenn Sie sicher sind, dass Sie einen Knoten haben, können Sie diese Eigenschaft verwenden. Ansonsten würde ich persönlich die Schnittstellen auf Node selbst verwenden, bis Sie wissen, welche Art von Knoten Sie haben.

Verwandte Themen