Es scheint, dass alle gängigen Browser den DOMParser API implementieren, so dass XML in einen DOM analysiert werden und abgefragt dann mit XPath, getElementsByTagName, etc ...Wie erkenne ich XML-Parsing-Fehler bei der Verwendung von Javascript DOMParser in einem Browser-Browser?
Allerdings scheint Erkennung Parsingfehler kniffliger zu sein. DOMParser.prototype.parseFromString
gibt immer ein gültiges DOM zurück. Wenn ein Parsing-Fehler auftritt, enthält das zurückgegebene DOM ein <parsererror>
Element, aber es unterscheidet sich in jedem Haupt-Browser geringfügig.
Beispiel JavaScript:
xmlText = '<root xmlns="http://default" xmlns:other="http://other"><child><otherr:grandchild/></child></root>';
parser = new DOMParser();
dom = parser.parseFromString(xmlText, 'text/xml');
console.log((new XMLSerializer()).serializeToString(dom));
Ergebnis in Opera:
DOM Wurzel ist ein <parsererror>
Element.
<?xml version="1.0"?><parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">Error<sourcetext>Unknown source</sourcetext></parsererror>
Ergebnis in Firefox:
Wurzel des DOM ist ein <parsererror>
Element.
<?xml-stylesheet href="chrome://global/locale/intl.css" type="text/css"?>
<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">XML Parsing Error: prefix not bound to a namespace
Location: http://fiddle.jshell.net/_display/
Line Number 1, Column 64:<sourcetext><root xmlns="http://default" xmlns:other="http://other"><child><otherr:grandchild/></child></root>
---------------------------------------------------------------^</sourcetext></parsererror>
Ergebnis in Safari:
Das <root>
Element analysiert korrekt aber enthält eine verschachtelte <parsererror>
in einem anderen Namespace als Opera und <parsererror>
Elements Firefox.
<root xmlns="http://default" xmlns:other="http://other"><parsererror xmlns="http://www.w3.org/1999/xhtml" style="display: block; white-space: pre; border: 2px solid #c77; padding: 0 1em 0 1em; margin: 1em; background-color: #fdd; color: black"><h3>This page contains the following errors:</h3><div style="font-family:monospace;font-size:12px">error on line 1 at column 50: Namespace prefix otherr on grandchild is not defined
</div><h3>Below is a rendering of the page up to the first error.</h3></parsererror><child><otherr:grandchild/></child></root>
Fehle ich eine einfache, Cross-Browser-Art und Weise, wenn eine Analyse des Erfassens Fehler irgendwo im Dokument XML aufgetreten? Oder muss ich das DOM für jedes der möglichen <parsererror>
Elemente abfragen, die verschiedene Browser erzeugen könnten?
Können Sie '.getElementsByTagName (" parseerror ")' auf dem Stamm-DOM-Knoten aufrufen und davon ausgehen, dass ein Fehler aufgetreten ist, wenn die Länge der zurückgegebenen Knotenliste größer als Null ist? – Pointy
Technisch gesehen könnte das XML-Dokument, das ich analysiere, '' Elemente enthalten, aber immer noch vollständig gültiges XML sein (Elemente würden aus einem anderen Namensraum sein) Also müsste ich mehrere Aufrufe an' .getElementsByTagNameNS (Namespace, 'parser error ') 'für die' Namespace'-URIs von jedem Browser. –
cspotcode
Hmm. Nun, die HTML5-Spezifikation dafür ist gelinde gesagt fragmentarisch. – Pointy