## -*- Ruby -*- ## XML::DOM ## 1998-2001 by yoshidam ## require 'xml/dom2/node' require 'xml/dom2/domexception' require 'xml/dom2/nodelist' require 'xml/dom2/namednodemap' module XML module DOM =begin == Class XML::DOM::Element === superclass Node =end class Element 0 end ## [DOM2] def getAttributeNS(nsuri, localname) attr = getAttributeNodeNS(nsuri, localname) if attr.nil? "" else attr.nodeValue end end ## [DOM2] def setAttributeNS(nsuri, qname, value) if qname.index(':') prefix, localname = qname.split(':') raise DOMException.new(DOMException::NAMESPACE_ERR) if nsuri.nil? or (prefix == 'xml' and nsuri != 'http://www.w3.org/XML/1998/namespace') else raise DOMException.new(DOMException::NAMESPACE_ERR) if qname == 'xmlns' and nsuri != 'http://www.w3.org/2000/xmlns/' end attr = @ownerDocument.createAttributeNS(nsuri, qname) attr.appendChild(@ownerDocument.createTextNode(value)) setAttributeNodeNS(attr) end ## [DOM2] def removeAttributeNS(nsuri, localname) ret = getAttributeNodeNS(nsuri, localname) removeAttributeNode(ret) if ret end ## [DOM2] def getAttributeNodeNS(nsuri, localname) attributes.each do |attr| return attr if attr.namespaceURI == nsuri && attr.localname == localname end nil end ## [DOM2] def setAttributeNodeNS(newAttr) ret = getAttributeNodeNS(newAttr.namespaceURI, newAttr.localname) removeAttributeNode(ret) if ret setAttributeNode(newAttr) ret end ## [DOM2] def getElementsByTagNameNS(nsuri, localname) ret = NodeList.new @children.each do |node| if node.nodeType == ELEMENT_NODE if (localname == '*' || node.localname == localname) and (nsuri == '*' || node.namespaceURI == nsuri) ret << node end ret << node.getElementsByTagNameNS(nsuri, localname) end end if @children ret end ## [DOM2] def hasAttribute(name) !getAttributeNode(name).nil? end ## [DOM2] def hasAttributeNS(nsuri, localname) !getAttributeNodeNS(nsuri, localname).nil? end def idAttribute; @idAttribute; end def idAttribute=(name); @idAttribute = name; end def _checkNode(node) unless node.nodeType == ELEMENT_NODE || node.nodeType == TEXT_NODE || node.nodeType == COMMENT_NODE || node.nodeType == PROCESSING_INSTRUCTION_NODE || node.nodeType == CDATA_SECTION_NODE || node.nodeType == ENTITY_REFERENCE_NODE raise DOMException.new(DOMException::HIERARCHY_REQUEST_ERR) end end end end end