2017-12-31 141 views
1

Wenn wir Conformance-Chart, wie https://caniuse.com/#search=xpath und https://developer.microsoft.com/en-us/microsoft-edge/platform/status/domlevel3xpath/?q=xpath, es ist in der Regel etwa DOM Level 3 XPath sehen, die mithilfe von XPath auf dem Zugriff auf DOM-Objekt fokussiert 1.0, aber nicht unbedingt XPath 3.0 oder höher.XPath 3 in Browser

Frage 1 - Gibt es eine explizite Version Voraussetzung für Browser von W3C usw. neueren Versionen von XPath zu unterstützen?

Diese XPath 1.0 Feature funktioniert:

document.evaluate(
    'normalize-space(" X ")', 
    document, null, XPathResult.ANY_TYPE, null).stringValue 

// => "X" 

Aber diese XPath 3.0 Inline-Funktion Funktion (ref) wirft:

document.evaluate(
    'let $incr := function($n as xs:integer) as xs:integer { $n +1 } return $incr(2)', 
    document, null, XPathResult.ANY_TYPE, null).stringValue 

Rand:

XPATH15001: XPath query "let $incr := function($n as xs:integer) as xs:integer { $n +1 } return $incr(2)" not supported

Firefox:

SyntaxError: The expression is not a legal expression.

Frage 2 - Wenn XPath 3.0 in Browser erlaubt, Fehler in meinem Code angenommen; Wie wäre es dann mit v3.1 Features (wie arrow-functions), sind diese auch erlaubt?

Antwort

3

No browsers support XPath 2.0 natively, geschweige denn XPath 3.0.

Beachten Sie auch, dass XPath, unlike XSLT, doesn't have an intrinsic way of determining the version of an XPath implementation andere als eine Funktion unterstützt von einer bestimmten Version versucht und Beobachten, ob ein Fehler auftritt, wie du getan hast.

+0

Da der Standard nicht neue XPath-Unterstützung erforderlich ist, werden keine Anstrengungen unternommen werden. – Annie

+0

XPath2.0 wurde 2014 durch XPath3.0 abgelöst. – Annie

+4

Ein Standard kann die Einhaltung von Bestimmungen diktieren, erzwingt aber keine Übernahme. – kjhughes

2

Saxon-JS stellt eine Implementierung von XPath 3.1, die in jedem Browser läuft (es in Javascript geschrieben).

Es ist jedoch nicht (noch) höhere Ordnung Funktionen unterstützen, so dass das Beispiel einer Inline-Funktion wird nicht funktionieren.