Niche Portobello Mushroom

    xmldom-qsa
    TypeScript icon, indicating that this package has built-in type declarations

    1.1.2 • Public • Published

    xmldom-qsa

    This is based on xmldom with some minor enhancements.

    xmldom-qsa add querySelector, querySelectorAll and match method to Document and Element. And you can write some more methods to these elements by add prototype methods to Node.

    xmldom is a javascript ponyfill to provide the following APIs that are present in modern browsers to other runtimes:

    • convert an XML string into a DOM tree
      new DOMParser().parseFromString(xml, mimeType) => Document
      
    • create, access and modify a DOM tree
      new DOMImplementation().createDocument(...) => Document
      
    • serialize a DOM tree back into an XML string
      new XMLSerializer().serializeToString(node) => string
      

    The target runtimes xmldom supports are currently Node >= v10 (ES5) and Rhino (not tested as part of CI).

    When deciding how to fix bugs or implement features, xmldom tries to stay as close as possible to the various related specifications/standards. As indicated by the version starting with 0., this implementation is not feature complete and some implemented features differ from what the specifications describe. Issues and PRs for such differences are always welcome, even when they only provide a failing test case.

    This project was forked from it's original source in 2019, more details about that transition can be found in the CHANGELOG.

    Usage

    Install:

    npm install xmldom-qsa

    Enhancements:

    doc.documentElement.querySelector('.clazz');
    
    var Node = require('xmldom-qsa/dom').Node;
    Node.prototype.addAttr = function(x,y) { ... }
    doc.documentElement.addAttr('x','y');

    Example:

    const { DOMParser } = require('xmldom-qsa')
    
    const doc = new DOMParser().parseFromString(
        '<xml xmlns="a" xmlns:c="./lite">\n' +
            '\t<child>test</child>\n' +
            '\t<child></child>\n' +
            '\t<child/>\n' +
            '</xml>',
        'text/xml'
    )
    doc.documentElement.setAttribute('x', 'y')
    doc.documentElement.setAttributeNS('./lite', 'c:x', 'y2')
    console.info(doc)
    
    const nsAttr = doc.documentElement.getAttributeNS('./lite', 'x')
    console.info(nsAttr)

    Note: in Typescript and ES6 you can use the import approach, as follows:

    import { DOMParser } from 'xmldom-qsa'

    API Reference

    • DOMParser:

      parseFromString(xmlsource,mimeType)
      • options extension by xmldom (not DOM standard!!)
      //added the options argument
      new DOMParser(options)
      
      //errorHandler is supported
      new DOMParser({
      	/**
      	 * locator is always need for error position info
      	 */
      	locator:{},
      	/**
      	 * you can override the errorHandler for xml parser
      	 * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
      	 */
      	errorHandler:{warning:function(w){console.warn(w)},error:callback,fatalError:callback}
      	//only callback model
      	//errorHandler:function(level,msg){console.log(level,msg)}
      })
    • XMLSerializer

      serializeToString(node)

    DOM level2 method and attribute:

    • Node

       attribute:
       	nodeValue|prefix
       readonly attribute:
       	nodeName|nodeType|parentNode|childNodes|firstChild|lastChild|previousSibling|nextSibling|attributes|ownerDocument|namespaceURI|localName
       method:
       	insertBefore(newChild, refChild)
       	replaceChild(newChild, oldChild)
       	removeChild(oldChild)
       	appendChild(newChild)
       	hasChildNodes()
       	cloneNode(deep)
       	normalize()
       	isSupported(feature, version)
       	hasAttributes()
      
    • DOMException The DOMException class has the following constants (and value of type Number):

      1. DOMException.INDEX_SIZE_ERR (1)
      2. DOMException.DOMSTRING_SIZE_ERR (2)
      3. DOMException.HIERARCHY_REQUEST_ERR (3)
      4. DOMException.WRONG_DOCUMENT_ERR (4)
      5. DOMException.INVALID_CHARACTER_ERR (5)
      6. DOMException.NO_DATA_ALLOWED_ERR (6)
      7. DOMException.NO_MODIFICATION_ALLOWED_ERR (7)
      8. DOMException.NOT_FOUND_ERR (8)
      9. DOMException.NOT_SUPPORTED_ERR (9)
      10. DOMException.INUSE_ATTRIBUTE_ERR (10)
      11. DOMException.INVALID_STATE_ERR (11)
      12. DOMException.SYNTAX_ERR (12)
      13. DOMException.INVALID_MODIFICATION_ERR (13)
      14. DOMException.NAMESPACE_ERR (14)
      15. DOMException.INVALID_ACCESS_ERR (15)

      The DOMException object has the following properties: code This property is of type Number.

      • extends the Error type thrown as part of DOM API:
    • DOMImplementation

       method:
       	hasFeature(feature, version)
       	createDocumentType(qualifiedName, publicId, systemId)
       	createDocument(namespaceURI, qualifiedName, doctype)
      
    • Document : Node

       readonly attribute:
       	doctype|implementation|documentElement
       method:
       	createElement(tagName)
       	createDocumentFragment()
       	createTextNode(data)
       	createComment(data)
       	createCDATASection(data)
       	createProcessingInstruction(target, data)
       	createAttribute(name)
       	createEntityReference(name)
       	getElementsByTagName(tagname)
       	importNode(importedNode, deep)
       	createElementNS(namespaceURI, qualifiedName)
       	createAttributeNS(namespaceURI, qualifiedName)
       	getElementsByTagNameNS(namespaceURI, localName)
       	getElementById(elementId)
      
    • DocumentFragment : Node

    • Element : Node

       readonly attribute:
       	tagName
       method:
       	getAttribute(name)
       	setAttribute(name, value)
       	removeAttribute(name)
       	getAttributeNode(name)
       	setAttributeNode(newAttr)
       	removeAttributeNode(oldAttr)
       	getElementsByTagName(name)
       	getAttributeNS(namespaceURI, localName)
       	setAttributeNS(namespaceURI, qualifiedName, value)
       	removeAttributeNS(namespaceURI, localName)
       	getAttributeNodeNS(namespaceURI, localName)
       	setAttributeNodeNS(newAttr)
       	getElementsByTagNameNS(namespaceURI, localName)
       	hasAttribute(name)
       	hasAttributeNS(namespaceURI, localName)
      
    • Attr : Node

       attribute:
       	value
       readonly attribute:
       	name|specified|ownerElement
      
    • NodeList

       readonly attribute:
       	length
       method:
       	item(index)
      
    • NamedNodeMap

       readonly attribute:
       	length
       method:
       	getNamedItem(name)
       	setNamedItem(arg)
       	removeNamedItem(name)
       	item(index)
       	getNamedItemNS(namespaceURI, localName)
       	setNamedItemNS(arg)
       	removeNamedItemNS(namespaceURI, localName)
      
    • CharacterData : Node

       method:
       	substringData(offset, count)
       	appendData(arg)
       	insertData(offset, arg)
       	deleteData(offset, count)
       	replaceData(offset, count, arg)
      
    • Text : CharacterData

       method:
       	splitText(offset)
      
    • CDATASection

    • Comment : CharacterData

    • DocumentType

       readonly attribute:
       	name|entities|notations|publicId|systemId|internalSubset
      
    • Notation : Node

       readonly attribute:
       	publicId|systemId
      
    • Entity : Node

       readonly attribute:
       	publicId|systemId|notationName
      
    • EntityReference : Node

    • ProcessingInstruction : Node

       attribute:
       	data
       readonly attribute:
       	target
      

    DOM level 3 support:

    • Node

       attribute:
       	textContent
       method:
       	isDefaultNamespace(namespaceURI){
       	lookupNamespaceURI(prefix)
      

    DOM extension by xmldom

    • [Node] Source position extension;

        attribute:
        	//Numbered starting from '1'
        	lineNumber
        	//Numbered starting from '1'
        	columnNumber
      

    Specs

    The implementation is based on several specifications:

    Overview of related specifications and their relations

    DOM Parsing and Serialization

    From the W3C DOM Parsing and Serialization (WD 2016) xmldom provides an implementation for the interfaces:

    • DOMParser
    • XMLSerializer

    Note that there are some known deviations between this implementation and the W3 specifications.

    Note: The latest version of this spec has the status "Editors Draft", since it is under active development. One major change is that the definition of the DOMParser interface has been moved to the HTML spec

    DOM

    The original author claims that xmldom implements [DOM Level 2] in a "fully compatible" way and some parts of [DOM Level 3], but there are not enough tests to prove this. Both Specifications are now superseded by the [DOM Level 4 aka Living standard] wich has a much broader scope than xmldom.

    xmldom implements the following interfaces (most constructors are currently not exposed):

    • Attr
    • CDATASection
    • CharacterData
    • Comment
    • Document
    • DocumentFragment
    • DocumentType
    • DOMException (constructor exposed)
    • DOMImplementation (constructor exposed)
    • Element
    • Entity
    • EntityReference
    • LiveNodeList
    • NamedNodeMap
    • Node (constructor exposed)
    • NodeList
    • Notation
    • ProcessingInstruction
    • Text

    more details are available in the (incomplete) API Reference section.

    HTML

    xmldom does not have any goal of supporting the full spec, but it has some capability to parse, report and serialize things differently when "detecting HTML" (by checking the default namespace). There is an upcoming change to better align the implementation with the latest specs, related to https://github.com/xmldom/xmldom/issues/203.

    SAX, XML, XMLNS

    xmldom has an own SAX parser implementation to do the actual parsing, which implements some interfaces in alignment with the Java interfaces SAX defines:

    • XMLReader
    • DOMHandler

    There is an idea/proposal to make ti possible to replace it with something else in https://github.com/xmldom/xmldom/issues/55

    Install

    npm i xmldom-qsa

    DownloadsWeekly Downloads

    4,746

    Version

    1.1.2

    License

    MIT

    Unpacked Size

    160 kB

    Total Files

    13

    Last publish

    Collaborators

    • zeligzhou