A user account is required in order to edit this wiki, but we've had to disable public user registrations due to spam.

To request an account, ask an autoconfirmed user on Chat (such as one of these permanent autoconfirmed members).

DOM XPath: Difference between revisions

From WHATWG Wiki
Jump to navigation Jump to search
(evaluate() accepts XPathResult object)
m (delete trailing whitespace)
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
If someone ever decides to write down DOM XPath (i.e. a proper version of the [http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html DOM3XPath note]), take this into account:
If someone ever decides to write down DOM XPath (i.e. a proper version of the [https://www.w3.org/TR/DOM-Level-3-XPath/xpath.html DOM3XPath note]), take this into account:


* Integrate the XPath part of the section [http://www.whatwg.org/C#interactions-with-xpath-and-xslt Interactions with XPath and XSLT] from HTML.
* Integrate the XPath part of the section [https://html.spec.whatwg.org/multipage/infrastructure.html#interactions-with-xpath-and-xslt with XPath and XSLT] from HTML.
* Make it clear that contrary to XPath 1.0 multiple Text nodes can indeed be returned, even if they are siblings. The DOM is not the XML InfoSet. (As is the case in WebKit and Gecko today.)
* Make it clear that contrary to [https://www.w3.org/TR/1999/REC-xpath-19991116/ XPath 1.0] multiple Text nodes can indeed be returned, even if they are siblings. The DOM is not the XML InfoSet. (As is the case in WebKit and Gecko today.)
* Make it clear that contrary to XPath 1.0 the root of the tree is the Document (and not the root element). This means you can return the parent of the root element (can you get all types of siblings? comments, PIs, doctypes? probably, but untested).
* Make it clear that contrary to [https://www.w3.org/TR/1999/REC-xpath-19991116/ XPath 1.0] the root of the tree is the Document (and not the root element). This means you can return the parent of the root element (can you get all types of siblings? comments, PIs, doctypes? probably, but untested).
* Simplifications: http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0310.html
* Simplifications: https://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0310.html
* Exceptions: https://bugzilla.mozilla.org/show_bug.cgi?id=743888
* Exceptions: https://bugzilla.mozilla.org/show_bug.cgi?id=743888


Line 38: Line 38:
   XPathResult evaluate(Node contextNode,
   XPathResult evaluate(Node contextNode,
                       optional unsigned short type,
                       optional unsigned short type,
                       optional object? result);
                       optional XPathResult? result);
};
};


Line 46: Line 46:


interface mixin XPathEvaluatorBase {
interface mixin XPathEvaluatorBase {
   XPathExpression   createExpression(DOMString expression,  
   [NewObject] XPathExpression createExpression(DOMString expression,
                                      optional XPathNSResolver? resolver);
                                              optional XPathNSResolver? resolver);
   XPathNSResolver    createNSResolver(Node nodeResolver);
   XPathNSResolver    createNSResolver(Node nodeResolver);
   XPathResult        evaluate(DOMString expression,  
   XPathResult        evaluate(DOMString expression,
                               Node contextNode,  
                               Node contextNode,
                               optional XPathNSResolver? resolver,  
                               optional XPathNSResolver? resolver,
                               optional unsigned short type,  
                               optional unsigned short type,
                               optional XPathResult? result);
                               optional XPathResult? result);
};
};

Revision as of 12:58, 29 May 2019

If someone ever decides to write down DOM XPath (i.e. a proper version of the DOM3XPath note), take this into account:

WebIDL interfaces

[Exposed=Window]
interface XPathResult {
  const unsigned short      ANY_TYPE                       = 0;
  const unsigned short      NUMBER_TYPE                    = 1;
  const unsigned short      STRING_TYPE                    = 2;
  const unsigned short      BOOLEAN_TYPE                   = 3;
  const unsigned short      UNORDERED_NODE_ITERATOR_TYPE   = 4;
  const unsigned short      ORDERED_NODE_ITERATOR_TYPE     = 5;
  const unsigned short      UNORDERED_NODE_SNAPSHOT_TYPE   = 6;
  const unsigned short      ORDERED_NODE_SNAPSHOT_TYPE     = 7;
  const unsigned short      ANY_UNORDERED_NODE_TYPE        = 8;
  const unsigned short      FIRST_ORDERED_NODE_TYPE        = 9;

  readonly attribute unsigned short resultType;
  readonly attribute unrestricted double numberValue;
  // Maybe "DOMString?".
  readonly attribute DOMString stringValue;
  readonly attribute boolean booleanValue;
  readonly attribute Node? singleNodeValue;
  readonly attribute boolean          invalidIteratorState;
  readonly attribute unsigned long    snapshotLength;
  Node?               iterateNext();
  Node?               snapshotItem(unsigned long index);
};

[Exposed=Window]
interface XPathExpression {
  XPathResult evaluate(Node contextNode,
                       optional unsigned short type,
                       optional XPathResult? result);
};

callback interface XPathNSResolver {
  DOMString? lookupNamespaceURI(DOMString? prefix);
};

interface mixin XPathEvaluatorBase {
  [NewObject] XPathExpression createExpression(DOMString expression,
                                               optional XPathNSResolver? resolver);
  XPathNSResolver    createNSResolver(Node nodeResolver);
  XPathResult        evaluate(DOMString expression,
                              Node contextNode,
                              optional XPathNSResolver? resolver,
                              optional unsigned short type,
                              optional XPathResult? result);
};

[Exposed=Window, Constructor]
interface XPathEvaluator {};

XPathEvaluator includes XPathEvaluatorBase;
Document includes XPathEvaluatorBase;

Indeed, you can both construct this object and access its methods on Document. Isn't the world wonderful?