o [d, @sdZddlZddlZddlmZmZmZmZddlTddl m Z m Z ej j jej j jfZGdddej j Z ee dd d ee d d d ee d dd ddZddZddZddZddZGddde ZGddde Zeeddd eed dd eed d!d Gd"d#d#eZeed$d%d eZGd&d'd'eZeddZGd(d)d)e Zeed*d+d eed d,d d-d.ZGd/d0d0Z Gd1d2d2e e Z!Gd3d4d4e e Z"ee"d$d5d Gd6d7d7e"Z#ee#d8d9d ee#d:d;d dd?Z%Gd@dAdAe"Z&GdBdCdCe#Z'GdDdEdEeZ(ee(d$dFd GdGdHdHZ)GdIdJdJe)e e Z*GdKdLdLe)e Z+GdMdNdNe)e e Z,GdOdPdPe Z-GdQdRdReZ.dSdTZ/GdUdVdVe e Z0ee0dWdXd dYdZZ1d[d\Z2d]d^Z3ded_d`Z4dfdadbZ5dfdcddZ6dS)gacSimple implementation of the Level 1 DOM. Namespaces and other minor Level 2 features are also supported. parse("foo.xml") parseString("") Todo: ===== * convenience methods for getting elements and text. * more testing * bring some of the writer and linearizer code into conformance with this interface * SAX 2 namespaces N)EMPTY_NAMESPACE EMPTY_PREFIXXMLNS_NAMESPACEdomreg)*)DOMImplementationLS DocumentLSc@seZdZdZdZdZdZdZeZ ddZ d2ddZ  d3dd Z d d Z d d ZddZddZddZddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Z dS)4NodeNcCdS)NTselfr r &/usr/lib/python3.10/xml/dom/minidom.py__bool__+z Node.__bool__cCs|dd||SN) toprettyxml)r encoding standaloner r rtoxml.z Node.toxml  cCsv|dur t}n tjt|ddd}|jtjkr%||d||||n||d|||dur5|S| S)Nxmlcharrefreplacer)rerrorsnewliner) ioStringIO TextIOWrapperBytesIOnodeTyper DOCUMENT_NODEwritexmlgetvaluedetach)r indentnewlrrwriterr r rr1s    zNode.toprettyxmlcC t|jSN)bool childNodesr r r r hasChildNodesD zNode.hasChildNodescC|jSr*r,r r r r_get_childNodesGzNode._get_childNodescC|jr|jdSdSNrr0r r r r_get_firstChildJ zNode._get_firstChildcCr3Nr0r r r r_get_lastChildNr6zNode._get_lastChildcCs|j|jkrt|jD]}|||q |S|j|jvr*tjdt |t |f|j dur5|j ||dur@| ||Sz|j |}Wn tyTtjw|jtvr^t||j||||_||_|r{|j|d}||_||_nd|_||_ |S)N%s cannot be child of %s)r!DOCUMENT_FRAGMENT_NODEtupler, insertBefore_child_node_typesxmldomHierarchyRequestErrrepr parentNode removeChild appendChildindex ValueError NotFoundErr_nodeTypes_with_children_clear_id_cacheinsert nextSiblingpreviousSibling)r newChildrefChildcrGnoder r rr>Rs<        zNode.insertBeforecCs|j|jkrt|jD]}||q |S|j|jvr)tjdt |t |f|jt vr2t ||j dur=|j |t||d|_|SNr:)r!r<r=r,rFr?r@rArBrCrJrKrDrE _append_childrM)r rRrQr r rrFrs       zNode.appendChildcCs |j|jkr|j}|||||S|j|jvr(tjdt |t |f||ur.dS|j dur9|j |z|j |}Wn t yMtjw||j |<||_ d|_ |jtvsc|jtvrgt||j|_|j|_d|_d|_|jr|||j_|jr||j_|SrS)r!r<rMrEr>r?r@rArBrCrDr,rGrHrIrJrKrN)r rOoldChildrPrGr r r replaceChilds@           zNode.replaceChildcCszz|j|Wn tytjw|jdur|j|j_|jdur)|j|j_d|_|_|jt vr8t |d|_ |Sr*) r,removerHr@rArIrMrNr!rJrKrDr rUr r rrEs        zNode.removeChildcCsg}|jD]Z}|jtjkrP|js%|r|j|d_|jr |j|j_|q|rJ|dj|jkrJ|d}|j|j|_|j|_|jrE||j_|q||q|||jtj kr_| q||jdd<dSr7) r,r!r TEXT_NODEdatarMrNunlinkappend ELEMENT_NODE normalize)r LchildrRr r rr^s,         zNode.normalizecCst|||jp|Sr*) _clone_node ownerDocument)r deepr r r cloneNodezNode.cloneNodecCs|jj||Sr*)rbimplementation hasFeaturer featureversionr r r isSupportedrzNode.isSupportedcCdSr*r r r r r_get_localNamezNode._get_localNamecCs||uSr*r r otherr r r isSameNodezNode.isSameNodecC||dr|SdSr*)rkr rir r r getInterface zNode.getInterfacec Cs*z|j|dWSttfyYdSwr4) _user_dataAttributeErrorKeyErrorr keyr r r getUserDatas zNode.getUserDatacCsnd}z|j}Wntyi}||_Ynw||vr ||d}|dur/d}|dur-||=|S||f||<|Sr4)rwrx)r r{rZhandlerolddr r r setUserDatas      zNode.setUserDatacCsHt|dr t|jD]\}\}}|dur||||||q dSdS)Nrw)hasattrlistrwitemshandle)r operationsrcdstr{rZr}r r r_call_user_data_handlers zNode._call_user_data_handlercCs>d|_|_|jr|jD]}|q t|_d|_d|_dSr*)rDrbr,r[NodeListrNrM)r r`r r rr[s    z Node.unlinkcCs|Sr*r r r r r __enter__rzNode.__enter__cCs |dSr*)r[)r etevtbr r r__exit__ z Node.__exit__NN)rrNN)!__name__ __module__ __qualname__ namespaceURIrDrbrMrNrprefixrrrr-r1r5r9r>rFrVrEr^rdrkrmrqrur|rrr[rrr r r rr "s@      r firstChildzFirst child node, or None.)doc lastChildzLast child node, or None. localNamez"Namespace-local name of this node.cCs2|j}|r|d}||_||_||||_dSr7)r,rNrMr\rD)r rRr,lastr r rrTs  rTcCs*|dur|jtjkr dS|j}|dusdSNTF)r!r r"rDrRr r r _in_document's  rcCs:|r|dddddddd}||d Sd S) zWrites datachars to writer.&z&z>N)replacewrite)r(rZr r r _write_data/s rcCsD|jD]}|jtjkr|dks|j|kr||t|||q|SNr)r,r!r r]tagNamer\_get_elements_by_tagName_helper)parentnamercrRr r rr6s   rcCsX|jD]&}|jtjkr)|dks|j|kr"|dks|j|kr"||t||||q|Sr)r,r!r r]rrr\"_get_elements_by_tagName_ns_helper)rnsURIrrrRr r rr>s   rc@sJeZdZejZdZdZdZdZ ej ej ej ej ejejejfZddZdS)DocumentFragmentz#document-fragmentNcCs t|_dSr*)rr,r r r r__init__UrzDocumentFragment.__init__)rrrr r<r!nodeName nodeValue attributesrDr]rYCDATA_SECTION_NODEENTITY_REFERENCE_NODEPROCESSING_INSTRUCTION_NODE COMMENT_NODE NOTATION_NODEr?rr r r rrGs rc@seZdZdZejZdZdZdZ ej ej fZ e ddfddZddZdd Zd d Zd d ZeeeZZddZddZeeeZZddZddZeeeZddZddZddZdS)Attr)_name_valuer_prefixr, _localNamerb ownerElementNFcCs@d|_||_||_||_|dur||_t|_|jtdSr*) rrrrrrr,r\Text)r qNamerrrr r rrcsz Attr.__init__cC.z|jWSty|jdddYSwN:r;r8)rrxrsplitr r r rrmr  zAttr._get_localNamecCr/r*) specifiedr r r r_get_specifiedxr2zAttr._get_specifiedcCr/r*)rr r r r _get_name{r2zAttr._get_namecCs"||_|jdurt|jdSdSr*)rrrKr valuer r r _set_name~s zAttr._set_namecCr/r*)rr r r r _get_valuer2zAttr._get_valuecCs6||_||jd_|jdurt|j||jd_dSr4)rr,rZrrKrr r r _set_values    zAttr._set_valuecCr/r*)rr r r r _get_prefixr2zAttr._get_prefixcCsd|j}|dkr|r|tkrtjd||_|dur|j}nd||jf}|jr-t|j||_ dS)Nxmlnsz5illegal use of 'xmlns' prefix for the wrong namespacez%s:%s) rrr@rA NamespaceErrrrrrKr)r rnsurinewNamer r r _set_prefixs   zAttr._set_prefixcCsv|j}|dur)|j|j=|j|j|jf=|jr)d|_|jd8_|jj d8_ |j D]}| q,|j dd=dS)NFr;) r_attrsr_attrsNSrr_is_id_magic_id_nodesrb_magic_id_countr,r[)r elemr`r r rr[s   z Attr.unlinkcCsb|jrdS|j}|j}|dus|durdS||}|dur dS|jr+||j|jS||jSr) rrbr_get_elem_inforisIdNSrisIdrr rrinfor r r _get_isIds  zAttr._get_isIdcCsX|j}|j}|dus|durtS||}|durtS|jr&||j|jS||jSr*) rbr_no_typerrgetAttributeTypeNSrgetAttributeTyperrr r r_get_schemaTypes  zAttr._get_schemaType) rrr __slots__r ATTRIBUTE_NODEr!rrrrYrr?rrrmrrrpropertyrrrrrrrrrr[rrr r r rrYs0    rrz True if this attribute is an ID.z'Namespace-local name of this attribute. schemaTypezSchema type for this attribute.c@seZdZdZdZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ d:ddZeZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Z dS); NamedNodeMapaThe attribute list is a transient interface to the underlying dictionaries. Mutations here will change the underlying element's dictionary. Ordering is imposed artificially and does not reflect the order of attributes as found in an input document. rr _ownerElementcCs||_||_||_dSr*r)r attrsattrsNSrr r rrs zNamedNodeMap.__init__cCr)r*)lenrr r r r _get_lengthr.zNamedNodeMap._get_lengthcCs.z |t|j|WStyYdSwr*)rrkeys IndexErrorr rGr r ritems  zNamedNodeMap.itemcCs*g}|jD] }||j|jfq|Sr*)rvaluesr\rrr r_rRr r rrszNamedNodeMap.itemscCs0g}|jD]}||j|jf|jfq|Sr*)rrr\rrrrr r ritemsNSszNamedNodeMap.itemsNScCst|tr ||jvS||jvSr*) isinstancestrrrrzr r r __contains__   zNamedNodeMap.__contains__cC |jSr*)rrr r r rrr.zNamedNodeMap.keyscCrr*)rrr r r rkeysNSr.zNamedNodeMap.keysNScCrr*)rrr r r rr r.zNamedNodeMap.valuesNcC|j||Sr*rget)r rrr r rr zNamedNodeMap.getcCs6|jt|ddur dSt|t|kt|t|kS)Nrr)rgetattridror r r_cmps zNamedNodeMap._cmpcCs||dkSr4rror r r__eq__rzNamedNodeMap.__eq__cCs||dkSr4rror r r__ge__rzNamedNodeMap.__ge__cCs||dkSr4rror r r__gt__rzNamedNodeMap.__gt__cCs||dkSr4rror r r__le__!rzNamedNodeMap.__le__cCs||dkSr4rror r r__lt__$rzNamedNodeMap.__lt__cCst|tr |j|S|j|Sr*)rr=rr)r attname_or_tupler r r __getitem__'rzNamedNodeMap.__getitem__cCsvt|tr)z|j|}Wnty#t|}|jj|_||Ynw||_dSt|ts2t d|}||dS)Nz%value must be a string or Attr object) rrrryrrrb setNamedItemr TypeError)r attnamerrRr r r __setitem__.s     zNamedNodeMap.__setitem__cCs"z|j|WStyYdSwr*)rryr rr r r getNamedItem=s   zNamedNodeMap.getNamedItemcCs&z|j||fWStyYdSwr*)rryr rrr r rgetNamedItemNSCs  zNamedNodeMap.getNamedItemNScCsT||}|dur%t|j|j|j=|j|j|jf=t|dr#d|_ |St j Nr) rrKrrrrrrrrr@rArIr rnr r rremoveNamedItemIs     zNamedNodeMap.removeNamedItemcCsV|||}|dur&t|j|j|j|jf=|j|j=t|dr$d|_ |St j r) rrKrrrrrrrrr@rArIr rrrr r rremoveNamedItemNSUs     zNamedNodeMap.removeNamedItemNScCstt|tstjdt|t|f|j|j}|r | ||j|j<||j |j |j f<|j |_t|j|SrS)rrr@rArBrCrrrr[rrrrrrK)r rRr~r r rr as   zNamedNodeMap.setNamedItemcCs ||Sr*)r r rRr r rsetNamedItemNSnr.zNamedNodeMap.setNamedItemNScCs||}t|j|dSr*)rKrr[)r rrRr r r __delitem__qs  zNamedNodeMap.__delitem__cCs|j|j|jfSr*rr r r r __getstate__vrzNamedNodeMap.__getstate__cCs|\|_|_|_dSr*rr stater r r __setstate__yszNamedNodeMap.__setstate__r*)!rrr__doc__rrrrrrrrrrr__len__rrrrrrrr rrrrr rrrrr r r rrs>     rlengthz$Number of nodes in the NamedNodeMap.c@s0eZdZdZddZddZddZdd Zd S) TypeInfo namespacercC||_||_dSr*r")r r#rr r rr zTypeInfo.__init__cCs.|jrd|jj|j|jfSd|jj|jfS)Nz<%s %r (from %r)>z<%s %r>)r# __class__rrr r r r__repr__s  zTypeInfo.__repr__cCr/r*)rr r r rrr2zTypeInfo._get_namecCr/r*)r#r r r r_get_namespacer2zTypeInfo._get_namespaceN)rrrrrr'rr(r r r rr!s  r!c@s eZdZdZejZdZeZ dZ ejej ej ej ejejfZeddfddZddZdd Zd d Zd d ZddZddZddZddZddZddZddZeZddZddZ d d!Z!e!Z"d"d#Z#d$d%Z$d&d'Z%d(d)Z&d*d+Z'd9d-d.Z(d/d0Z)d1d2Z*d3d4Z+d5d6Z,d7d8Z-dS):Element) rbrDrrrrrr,rrrMrNNrcCsBd|_||_|_||_||_t|_d|_|_d|_ d|_ dSr*) rDrrrrrr,rMrNrr)r rrrrr r rrs   zElement.__init__cCs|jdur i|_i|_dSdSr*)rrr r r r_ensure_attributess  zElement._ensure_attributescCrr)rrxrrr r r rrmrzElement._get_localNamecCr/r*rr r r r _get_tagNamer2zElement._get_tagNamecCs@|jdurt|jD]}|q d|_d|_t|dSr*)rrrr[rr )r attrr r rr[s  zElement.unlinkcCs2|jdurdSz|j|jWStyYdSw)aReturns the value of the specified attribute. Returns the value of the element's attribute named attname as a string. An empty string is returned if the element does not have such an attribute. Note that an empty string may also be returned as an explicitly given attribute value, use the hasAttribute method to distinguish these two cases. Nr)rrry)r r r r r getAttributes  zElement.getAttributecCs6|jdurdSz |j||fjWStyYdSwr)rrryrr r rgetAttributeNSs  zElement.getAttributeNScCs`||}|durt|}||_|j|_||dS||jkr,||_|jr.t|dSdSdSr*)getAttributeNoderrrbsetAttributeNoderrK)r r rr-r r r setAttributes   zElement.setAttributecCst|\}}|||}|dur%t||||}||_|j|_||dS||jkr4||_|jr4t||j|krA||_||_ dSdSr*) _nssplitgetAttributeNodeNSrrrbr1rrKrr)r r qualifiedNamerr localnamer-r r rsetAttributeNSs     zElement.setAttributeNScCs|jdurdS|j|Sr*r)r attrnamer r rr0s  zElement.getAttributeNodecCs|jdurdS|j||fSr*)rrrr r rr4 s zElement.getAttributeNodeNScCs|jd|fvr tjd||j|jd}|dur"|||j |j |j fd}|dur:||ur:||t ||||urE|S||urK|SdS)Nzattribute node already owned) rr@rAInuseAttributeErrr*rrrremoveAttributeNoderrr_set_attribute_node)r r-old1old2r r rr1s    zElement.setAttributeNodecCsJ|jdur tjz|j|}Wn tytjw||dSr*)rr@rArIrryr:)r rr-r r rremoveAttribute's    zElement.removeAttributecCsN|jdur tjz |j||f}Wn tytjw||dSr*)rr@rArIryr:)r rrr-r r rremoveAttributeNS0s    zElement.removeAttributeNScCsX|dur tjz|j|jWn tytjwt|||j|_|Sr*) r@rArIrrryrKr[rbrr r rr:9s   zElement.removeAttributeNodecCs|jdurdS||jvS)zChecks whether the element has an attribute with the specified name. Returns True if the element has an attribute with the specified name. Otherwise, returns False. NFrr r r r hasAttributeIs  zElement.hasAttributecCs|jdurdS||f|jvSNF)rrr r rhasAttributeNSSs zElement.hasAttributeNScCt||tS)zReturns all descendant elements with the given tag name. Returns the list of all descendant elements (not direct children only) with the specified tag name. rrr r r rgetElementsByTagNameXszElement.getElementsByTagNamecCt|||tSr*rrrr r rgetElementsByTagNameNS` zElement.getElementsByTagNameNScCsd|jt|fS)Nz)rrr r r rr'drezElement.__repr__rcCs||d|j|}|D]}|d|t|||j|dq|jrv|dt|jdkrP|jdjt j t j fvrP|jd |dddn|||jD] }| |||||qX|||d|j|fd S|d |d S) zWrite an XML element to a file-like object Write the element to the writer object that must provide a write method (e.g. a file or StringIO object). rz %s="rrr;rrz%sz/>%sN) rr_get_attributesrrrr,rr!r rYrr#)r r(r& addindentr'ra_namerRr r rr#gs&        zElement.writexmlcCs|t|j|j|Sr*)r*rrrr r r rrKszElement._get_attributescCs|jrdSdSrr@r r r r hasAttributesszElement.hasAttributescCs||}||dSr*)r0setIdAttributeNode)r ridAttrr r rsetIdAttributes zElement.setIdAttributecCs|||}||dSr*)r4rO)r rrrPr r rsetIdAttributeNSs zElement.setIdAttributeNScCsn|dus ||jstjt|durtj|js5d|_|jd7_|j j d7_ t |dSdS)NTr;) rqrr@rArI_get_containing_entrefNoModificationAllowedErrrrrbrrK)r rPr r rrOs    zElement.setIdAttributeNoderrr).rrrrr r]r!rrrrrrrYrrr?rrr*rmr,r[r.r/r2r7r0r4r1setAttributeNodeNSr>r?r:removeAttributeNodeNSrArCrFrIr'r#rKrNrQrRrOr r r rr)sV        r)rz*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.cCs8t||||j|j<||j|j|jf<||_dSr*)rKr*rrrrrr)elementr-r r rr;s   r;c@sfeZdZdZdZdZeZdZdZ ddZ ddZ dd Z d d Z d d ZddZddZddZdS) ChildlesszMixin that makes childless-ness easy to implement and avoids the complexity of the Node methods that deal with children. r NcCrlr*r r r r rr5rzChildless._get_firstChildcCrlr*r r r r rr9rzChildless._get_lastChildcCtj|jd)Nz nodes cannot have childrenr@rArBrrr r rrFzChildless.appendChildcCr rBr r r r rr-rzChildless.hasChildNodescCrZNz nodes do not have childrenr[r rOrPr r rr>r\zChildless.insertBeforecCrZr])r@rArIrrXr r rrEr\zChildless.removeChildcCrlr*r r r r rr^rnzChildless.normalizecCrZr]r[r rOrUr r rrVr\zChildless.replaceChild)rrrrrr EmptyNodeListr,rrr5r9rFr-r>rEr^rVr r r rrYs rYc@s\eZdZejZdZddZddZddZ e ee Z dd Z d d Z e e e Zdd dZdS)ProcessingInstructiontargetrZcCr$r*rb)r rcrZr r rrr%zProcessingInstruction.__init__cCr/r*rZr r r r_get_nodeValuer2z$ProcessingInstruction._get_nodeValuecC ||_dSr*rdrr r r_set_nodeValuer.z$ProcessingInstruction._set_nodeValuecCr/r*rcr r r r _get_nodeNamer2z#ProcessingInstruction._get_nodeNamecCrfr*rhrr r r _set_nodeNamer.z#ProcessingInstruction._set_nodeNamercCs|d||j|j|fdS)Nz %s%s)rrcrZr r(r&rLr'r r rr#szProcessingInstruction.writexmlNrU)rrrr rr!rrrergrrrirjrr#r r r rras  rac@sreZdZdZddZddZeZddZdd Ze eeZ Z d d Z d d Z ddZddZddZddZdS) CharacterData)_datarbrDrNrMcCs,d|_|_d|_|_d|_t|dSr)rbrDrNrMrmr rr r r rrs  zCharacterData.__init__cCr)r*)rrZr r r rrr.zCharacterData._get_lengthcCr/r*rmr r r r _get_datar2zCharacterData._get_datacCrfr*rnr rZr r r _set_data r.zCharacterData._set_datacCs6|j}t|dkr d}nd}d|jj|dd|fS)N z...rzr)rZrr&r)r rZ dotdotdotr r rr's zCharacterData.__repr__cCsT|dkr tjd|t|jkrtjd|dkr!tjd|j|||SNroffset cannot be negative#offset cannot be beyond end of datacount cannot be negativer@rA IndexSizeErrrrZr offsetcountr r r substringDatas   zCharacterData.substringDatacCs|j||_dSr*rd)r argr r r appendData rzCharacterData.appendDatacCs^|dkr tjd|t|jkrtjd|r-d|jd|||j|df|_dSdS)Nrrurv%s%s%srx)r r{r~r r r insertData#s   zCharacterData.insertDatacCsp|dkr tjd|t|jkrtjd|dkr!tjd|r6|jd||j||d|_dSdSrtrxrzr r r deleteData,s   &zCharacterData.deleteDatacCsv|dkr tjd|t|jkrtjd|dkr!tjd|r9d|jd|||j||df|_dSdS)Nrrurvrwrrx)r r{r|r~r r r replaceData6s    zCharacterData.replaceDataN)rrrrrrrrorqrrZrr'r}rrrrr r r rrls   rlzLength of the string data.c@sHeZdZdZejZdZdZddZ dddZ d d Z d d Z d dZ dS)rr z#textNcCs|dks |t|jkrtjd|}|j|d|_|j|_|j}|jr?||jj vr?|dur8|j |n|j |||jd||_|S)Nrzillegal offset value) rrZr@rAryr&rbrMrDr,rFr>)r r{newTextnextr r r splitTextKs zText.splitTextrcCst|d||j|fdS)Nr)rrZrkr r rr#Zsz Text.writexmlcCs|jg}|j}|dur$|jtjtjfvr|d|j|j}nn|dus |j}|durC|jtjtjfvr>||j|j}nn|dus+d |S)Nrr) rZrNr!r rYrrLrMr\join)r r_rr r r_get_wholeText_s   zText._get_wholeTextcCs|j}|j}|dur#|jtjtjfvr|j}|||}nn|dus |j}|s-|||durJ|jtjtjfvrE|j}|||}nn|dus1|rQ||_|SdSr*) rDrNr!r rYrrErMrZ)r contentrrrr r rreplaceWholeTextqs.   zText.replaceWholeTextcCsB|jrdSt|}|durdS|j|}|durdS|SrB)rZstrip_get_containing_elementrbrisElementContent)r rrr r r!_get_isWhitespaceInElementContents  z&Text._get_isWhitespaceInElementContentrU)rrrrr rYr!rrrr#rrrr r r rrDs  risWhitespaceInElementContentzKTrue iff this text node contains only whitespace and is in element content. wholeTextz.The text of all logically-adjacent text nodes.cC0|j}|dur|jtjkr|S|j}|dusdSr*)rDr!r r]rRrQr r rr rcCrr*)rDr!r rrr r rrSrrSc@s(eZdZejZdZddZdddZdS) Commentz#commentcCst|||_dSr*)rlrrmrpr r rrs  zComment.__init__rcCs,d|jvr td|d||j|fdS)Nz--z%'--' is not allowed in a comment nodez %s%s)rZrHrrkr r rr#s zComment.writexmlNrU) rrrr rr!rrr#r r r rrs rc@s$eZdZdZejZdZdddZdS) CDATASectionr z#cdata-sectionrcCs,|jddkr td|d|jdS)Nz]]>rz$']]>' not allowed in a CDATA sectionz)rZfindrHrrkr r rr#szCDATASection.writexmlNrU) rrrrr rr!rr#r r r rrs rc@szeZdZdZdddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdS)ReadOnlySequentialNamedNodeMap_seqr cCrfr*r)r seqr r rrs z'ReadOnlySequentialNamedNodeMap.__init__cCr)r*rrr r r rrr.z&ReadOnlySequentialNamedNodeMap.__len__cCr)r*rr r r rrr.z*ReadOnlySequentialNamedNodeMap._get_lengthcCs"|jD] }|j|kr|SqdSr*)rrrr r rrs  z+ReadOnlySequentialNamedNodeMap.getNamedItemcCs,|jD]}|j|kr|j|kr|SqdSr*)rrrrr r rrs z-ReadOnlySequentialNamedNodeMap.getNamedItemNScCs4t|tr |j|}n||}|durt||Sr*)rr=rrry)r name_or_tuplerRr r rrs   z*ReadOnlySequentialNamedNodeMap.__getitem__cCs.|dkrdSz|j|WStyYdSwr4)rrrr r rrs  z#ReadOnlySequentialNamedNodeMap.itemcC tjdNz"NamedNodeMap instance is read-onlyr@rArTr r r rrz.ReadOnlySequentialNamedNodeMap.removeNamedItemcCrrrrr r rrrz0ReadOnlySequentialNamedNodeMap.removeNamedItemNScCrrrrr r rr rz+ReadOnlySequentialNamedNodeMap.setNamedItemcCrrrrr r rrrz-ReadOnlySequentialNamedNodeMap.setNamedItemNScCs|jgSr*rr r r rrrrz+ReadOnlySequentialNamedNodeMap.__getstate__cCs|d|_dSr4rrr r rrrz+ReadOnlySequentialNamedNodeMap.__setstate__N)r )rrrrrrrrrrrrrr rrrr r r rrs   rz&Number of entries in the NamedNodeMap.c@s,eZdZdZdZddZddZddZd S) Identifiedz@Mix-in class that supports the publicId and systemId attributes.publicIdsystemIdcCr$r*r)r rrr r r_identified_mixin_initr%z!Identified._identified_mixin_initcCr/r*)rr r r r _get_publicIdr2zIdentified._get_publicIdcCr/r*)rr r r r _get_systemIdr2zIdentified._get_systemIdN)rrrrrrrrr r r rr s  rc@sHeZdZejZdZdZdZdZ dZ ddZ ddZ ddZ d d d ZdS) DocumentTypeNcCs2t|_t|_|rt|\}}||_|j|_dSr*)rentities notationsr3rr)r r5rr6r r rr$s   zDocumentType.__init__cCr/r*)internalSubsetr r r r_get_internalSubset,r2z DocumentType._get_internalSubsetcCs|jdurstd}|j|_|j|_tjjj}|rjg|j_ g|j _ |j j D]}t |j|j |j }|j j |||||q$|jj D]'}t|j|j |j |j}|j|_|j|_|j|_|jj |||||qB|||||SdSr*)rbrrrr@rAUserDataHandler NODE_CLONEDrrrNotationrrr\rEntity notationNameactualEncodingrrj)r rcclonerrnotationeentityr r rrd/s0    zDocumentType.cloneNodercCs|d||j|jr|d||j||jfn |jr)|d||jf|jdur>|d||j|d|d|dS)Nz trzEntity.insertBeforecCr)Nz*cannot remove children from an entity noderrXr r rrExrzEntity.removeChildcCr)Nz)cannot replace children of an entity noderr_r r rrV|rzEntity.replaceChild)rrrrr ENTITY_NODEr!rrrrjrrrrrFr>rErVr r r rrXs rc@seZdZejZdZddZdS)rNcCs||_|||dSr*)rr)r rrrr r rrszNotation.__init__)rrrr rr!rrr r r rrs rc@s<eZdZgdZddZddZddZdd Zd d Zd S) DOMImplementation))core1.0)r2.0)rN)r@r)r@r)r@N)ls-loadz3.0)rNcCs|dkrd}||f|jvSr)lower _featuresrhr r rrgszDOMImplementation.hasFeaturec Cs|r |jdur tjd|}|duo|duo|du }|s(|r(tjd|rZt|\}}|dkr>|dkr>tjd|rH|sHtjd|||}|rU| || ||rb||_|_ ||_ ||_ |S)Nz(doctype object owned by another DOM treezElement with no namer@z$http://www.w3.org/XML/1998/namespacezillegal use of 'xml' prefixz(illegal use of prefix without namespaces) rDr@rAWrongDocumentErr_create_documentInvalidCharacterErrr3rcreateElementNSrFrbdoctyperf) r rr5rradd_root_elementrr6rXr r rcreateDocuments<       z DOMImplementation.createDocumentcCst|}||_||_|Sr*)rrr)r r5rrrr r rcreateDocumentTypez$DOMImplementation.createDocumentTypecCrsr*)rgrtr r rrurvzDOMImplementation.getInterfacecCstSr*)Documentr r r rrr2z"DOMImplementation._create_documentN) rrrrrgrrrurr r r rrs - rc@s\eZdZdZdZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ dS) ElementInfozObject that represents content-model information for an element. This implementation is not expected to be used in practice; DOM builders should provide implementations which do the right thing using information available to it. r+cCrfr*r+r r r rrr.zElementInfo.__init__cCtSr*rr anamer r rrrzElementInfo.getAttributeTypecCrr*rrr r rrrzElementInfo.getAttributeTypeNScCr rBr r r r rrrzElementInfo.isElementContentcCr )zQReturns true iff this element is declared to have an EMPTY content model.Fr r r r risEmptyszElementInfo.isEmptycCr )z7Returns true iff the named attribute is a DTD-style ID.Fr rr r rrrnzElementInfo.isIdcCr )zd?Z8d@dAZ9dBdCZ:  dIdEdFZ;dGdHZr2zDocument._get_encodingcCr/r*) errorHandlerr r r r_get_errorHandlerAr2zDocument._get_errorHandlercCr/r*)rr r r r_get_standaloneDr2zDocument._get_standalonecCr/r*)strictErrorCheckingr r r r_get_strictErrorCheckingGr2z!Document._get_strictErrorCheckingcCr/r*rr r r rrJr2zDocument._get_versioncCsj|j|jvrtjdt|t|f|jdur|j||jtj kr/| r/tjdt ||S)Nr:z two document elements disallowed) r!r?r@rArBrCrDrEr r]_get_documentElementrFrr r rrFMs     zDocument.appendChildcCsPz|j|Wn tytjwd|_|_d|_|j |ur&d|_ |Sr*) r,rWrHr@rArIrMrNrDdocumentElementrXr r rrE]s    zDocument.removeChildcCs$|jD] }|jtjkr|SqdSr*)r,r!r r]rr r rris  zDocument._get_documentElementcCs(|jdur |jd|_t|dSr*)rr[r r r r rr[ns  zDocument.unlinkcCs|sdS|jddd}|j|_|j|_|j|_|jD]7}t|||}|j|s+J|j ||j t j kr?|j dus>Jn|j t jkrO|jdusLJ||_||_q|tjjj|||Sr*)rfrrrrjr,rarbrqr\r!r r"rrrrDrr@rArr)r rcrr childcloner r rrdts(      zDocument.cloneNodecCst}||_|Sr*)rrb)r rr r rcreateDocumentFragmentszDocument.createDocumentFragmentcCt|}||_|Sr*)r)rb)r rrr r r createElementzDocument.createElementcC(t|ts tdt}||_||_|SNznode contents must be a string)rrr rrZrb)r rZtr r rcreateTextNode zDocument.createTextNodecCrr)rrr rrZrbr rZrQr r rcreateCDATASectionrzDocument.createCDATASectioncCrr*)rrbrr r r createCommentrzDocument.createCommentcCst||}||_|Sr*)rarb)r rcrZpr r rcreateProcessingInstructions z$Document.createProcessingInstructioncCst|}||_d|_|Sr)rrbr)r rar r rcreateAttributerzDocument.createAttributecCs"t|\}}t|||}||_|Sr*)r3r)rb)r rr5rrrr r rrs  zDocument.createElementNScCs*t|\}}t||||}||_d|_|Sr)r3rrbr)r rr5rrrr r rcreateAttributeNSs zDocument.createAttributeNScCst||||}||_|Sr*)rrb)r rrrrrr r r_create_entityszDocument._create_entitycCst|||}||_|Sr*)rrb)r rrrrr r r_create_notations zDocument._create_notationcCs~||jvr |j|S|js|jsdS|j}|dur!|jg}||_n|s%dSd}|r|}|dd|jD||}|r|j D]S}|j re| |j |j rd||j|j<|j|kr_|}qD|jsdn4qD||jr||j|j<|j|kry|}qD|js~nqD|jr||j|j<|j|kr|}qD|jdkrnqDn|jr|j D]}|jr||j|j<|j|kr|}q|dur |S|s)|S)NcSsg|] }|jtvr|qSr )r!rJ).0r`r r r s z+Document.getElementById..r;)rrrrrpopextendr,rrrrrrrrrrr)r rstackresultrRrr-r r rgetElementByIdsf              'zDocument.getElementByIdcCrDr*rEr r r rrFrzDocument.getElementsByTagNamecCrGr*rHrr r rrI rJzDocument.getElementsByTagNameNScCrr*)rfrgrhr r rrkrzDocument.isSupportedcCs<|jtjkr tjd|jtjkrtjdt|||S)Nzcannot import document nodesz!cannot import document type nodes)r!r r"r@rANotSupportedErrrra)r rRrcr r r importNodes     zDocument.importNoderc Csxg}|r |d|d|dur|d|rdndd|dd|d||jD] }|||||q/dS) Nz encoding="rz standalone="yesnoz)r\rrr,r#) r r(r&rLr'rr declarationsrRr r rr#s zDocument.writexmlcCsF|j|urtjd||jf|jtjtjfvrtjd|t kr[d|vr@| dd\}}|dkr?|tjj kr?tj dn|dkrV|tjj krV|jtjkrVtj dd}|}nd}d}|jtjkru|j }|durt|j}||nd}||_||_||_||_|jtjkr||_|S||_|dur|||r|||S)Nz?cannot rename nodes from other documents; expected %s, found %sz8renameNode() only applies to element and attribute nodesrr;rzillegal use of 'xmlns' prefixz$illegal use of the 'xmlns' attribute)rbr@rArr!r r]rrrrrrrrr:rrrrrrr1rO)r rrrrrrXis_idr r r renameNode(sb          zDocument.renameNode)rrrNN)=rrrrr r]rrrr?rrfr"r!rrrrDrNrMrrrrjrrrrrrrrrrrrrrrFrErr[rdrrrrrrrrrrrrrFrIrkrr#rr r r rr sn   : rrz#Top-level element of this document.c Cs|j|r tjjj}ntjjj}|jtj krQ| |j |j }|j D]}||j |j |j||j |j}|j|_q$|rP|jD] }t|||}||qBn|jtjkro|}|rn|jD] }t|||}||q`n|jtjkr|||j}n|jtjkr||j}n|jtjkr||j |j}n|jtj!kr|"|j}n|jtj#kr|$|j |j }d|_|j|_n|jtj%krE|j|usJtjjj}|j&'|j(|j)|j*}||_|rDg|j+_,g|j-_,|j-j,D]"} t.| j | j)| j*} || _|j-j,/| t0| dr | 1|| | q|j+j,D]1} t2| j | j)| j*| j3} | j4| _4| j5| _5| j6| _6|| _|j+j,/| t0| drB| 1|| | qn tj7dt8|t0|dr\|1||||S)zo Clone a node and give it the new owner document. Called by Node.cloneNode and Document.importNode TrzCannot clone node %s)9rbrqr@rArr NODE_IMPORTEDr!r r]rrrrrr7rr4rrr,rarFr<rrYrrZrrrrrcrrrrrrfrrrrrrrrr\rrrrrrrjrrC) rRrcnewOwnerDocumentrrr-rr`rQrrrrr r rraas                         racCs(|dd}t|dkr|Sd|dfS)Nrr;r)rr)r5fieldsr r rr3s   r3cCs0||i|}|\}}||||Sr*)getEvent expandNoder)funcargskwargseventstoktyperootNoder r r_do_pulldom_parses   rcCsD|dur|sddlm}||Sddlm}t|j|f||dS)z3Parse a file into a DOM by filename or file object.Nr expatbuilderpulldom)parserbufsize)xml.domrparserr)filerrrrr r rrs     rcCs>|durddlm}||Sddlm}t|j|fd|iS)z&Parse a file into a DOM from a string.Nrrrr)rr parseStringrr)stringrrrr r rrs    rcCs@|rt|tr t|}|D]\}}tj||sdSqtjSr*)rrr_parse_feature_stringrrfrg)featuresfvr r rgetDOMImplementations   r%rr*)7rrrr@rrrrxml.dom.minicompatxml.dom.xmlbuilderrrrAr r]rrJ defpropertyrTrrrrrrobjectr AttributeListr!rr)r;rYrarlrrrSrrrrrrrrrrKrrar3rrrr%r r r rsw  {$  )GU  ><( O*UR