a DOg @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`Z4dfdadbZ5dgdcddZ6dS)hacSimple 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)4NodeNcCsdS)NTselfr r 4/opt/alt/python39/lib64/python3.9/xml/dom/minidom.py__bool__+sz Node.__bool__cCs|dd||SN) toprettyxml)r encoding standaloner r r toxml.sz Node.toxml  cCsz|durt}ntjt|ddd}|jtjkrJ||d||||n||d|||durj|S| SdS)Nxmlcharrefreplacer)rerrorsnewliner) ioStringIO TextIOWrapperBytesIOnodeTyper DOCUMENT_NODEwritexmlgetvaluedetach)r indentnewlrrwriterr r r r1s   zNode.toprettyxmlcCs t|jSN)bool childNodesr r r r hasChildNodesDszNode.hasChildNodescCs|jSr&r(r r r r _get_childNodesGszNode._get_childNodescCs|jr|jdSdSNrr*r r r r _get_firstChildJszNode._get_firstChildcCs|jr|jdSdSNr*r r r r _get_lastChildNszNode._get_lastChildcCs|j|jkr,t|jD]}|||q|S|j|jvrTtjdt |t |f|j durj|j ||dur~| |nz|j |}WntytjYn0|jtvrt||j||||_||_|r|j|d}||_||_nd|_||_ |S)N%s cannot be child of %s)rDOCUMENT_FRAGMENT_NODEtupler( insertBefore_child_node_typesxmldomHierarchyRequestErrrepr parentNode removeChild appendChildindex ValueError NotFoundErr_nodeTypes_with_children_clear_id_cacheinsert nextSiblingpreviousSibling)r newChildrefChildcr>noder r r r5Rs8       zNode.insertBeforecCs|j|jkr*t|jD]}||q|S|j|jvrTtjdt |t |fn|jt vrft ||j dur||j |t||d|_|SNr1)rr3r4r(r=r6r7r8r9r:rArBr;r< _append_childrD)r rIrHr r r r=rs       zNode.appendChildcCs|j|jkr(|j}|||||S|j|jvrPtjdt |t |f||ur\dS|j durr|j |z|j |}Wnt ytjYn0||j |<||_ d|_ |jtvs|jtvrt||j|_|j|_d|_d|_|jr||j_|jr ||j_|SrJ)rr3rDr<r5r6r7r8r9r:r;r(r>r?r@rArBrE)r rFoldChildrGr>r r r replaceChilds@         zNode.replaceChildcCs~z|j|Wnty,tjYn0|jdurB|j|j_|jdurV|j|j_d|_|_|jt vrtt |d|_ |Sr&) r(remover?r7r8r@rDrErrArBr;r rLr r r r<s       zNode.removeChildcCsg}|jD]}|jtjkr|jsJ|r0|j|d_|jr@|j|j_|q|r|dj|jkr|d}|j|j|_|j|_|jr||j_|q||q |||jtj kr | q ||jdd<dSr.) r(rr TEXT_NODEdatarDrEunlinkappend ELEMENT_NODE normalize)r LchildrIr r r rUs*          zNode.normalizecCst|||jp|Sr&) _clone_node ownerDocument)r deepr r r cloneNodeszNode.cloneNodecCs|jj||Sr&)rYimplementation hasFeaturer featureversionr r r isSupportedszNode.isSupportedcCsdSr&r r r r r _get_localNameszNode._get_localNamecCs||uSr&r r otherr r r isSameNodeszNode.isSameNodecCs||dr|SdSdSr&)rar r_r r r getInterfaces zNode.getInterfacec Cs.z|j|dWSttfy(YdS0dSr,) _user_dataAttributeErrorKeyErrorr keyr r r getUserDataszNode.getUserDatacCsld}z |j}Wnty*i}||_Yn0||vr@||d}|dur\d}|durh||=n ||f||<|Sr,)rhri)r rlrQhandlerolddr r r setUserDatas     zNode.setUserDatacCsDt|dr@t|jD]&\}\}}|dur||||||qdS)Nrh)hasattrlistrhitemsZhandle)r operationsrcZdstrlrQrnr r r _call_user_data_handlers zNode._call_user_data_handlercCs>d|_|_|jr.|jD] }|qt|_d|_d|_dSr&)r;rYr(rRNodeListrErD)r rWr r r rRs   z Node.unlinkcCs|Sr&r r r r r __enter__szNode.__enter__cCs |dSr&)rR)r ZetZevtbr r r __exit__sz Node.__exit__)NN)rrNN)!__name__ __module__ __qualname__ namespaceURIr;rYrDrErprefixrrrr)r+r-r0r5r=rMr<rUr[rarbrergrmrqrwrRryr{r r r r r "s>      r firstChildzFirst child node, or None.)doc lastChildzLast child node, or None. localNamez"Namespace-local name of this node.cCs2|j}|r|d}||_||_||||_dSr.)r(rErDrSr;)r rIr(Zlastr r r rKs rKcCs$|dur |jtjkrdS|j}qdSNTF)rr rr;rIr r r _in_document's  rcCs6|r2|dddddddd}||d S) zWrites datachars to writer.&z&z>N)replacewrite)r%rQr r r _write_data/srcCsD|jD]8}|jtjkr2|dks(|j|kr2||t|||q|SNr)r(rr rTtagNamerS_get_elements_by_tagName_helper)parentnamercrIr r r r6s   rcCsX|jD]L}|jtjkr|dks(|j|krD|dks:|j|krD||t||||q|Sr)r(rr rTrrrS"_get_elements_by_tagName_ns_helper)rZnsURIrrrIr r r r>s   rc@sJeZdZejZdZdZdZdZ ej ej ej ej ejejejfZddZdS)DocumentFragmentz#document-fragmentNcCs t|_dSr&)rxr(r r r r __init__UszDocumentFragment.__init__)r|r}r~r r3rnodeName nodeValue attributesr;rTrPCDATA_SECTION_NODEENTITY_REFERENCE_NODEPROCESSING_INSTRUCTION_NODE COMMENT_NODE NOTATION_NODEr6rr r r r rGsrc@seZdZdZejZdZdZdZ ej ej fZ e ddfddZddZdd Zd d Zd d ZeeeZZddZddZeeeZZddZddZeeeZddZddZddZdS)Attr)_name_valuer_prefixr( _localNamerY ownerElementNFcCs2d|_||_||_||_t|_|jtdSr&)rrrrrxr(rSText)r qNamerrrr r r rcs z Attr.__init__cCs2z|jWSty,|jdddYS0dSN:r2r/)rrirsplitr r r r rbps zAttr._get_localNamecCs|jSr&) specifiedr r r r _get_specifiedvszAttr._get_specifiedcCs|jSr&)rr r r r _get_nameyszAttr._get_namecCs||_|jdurt|jdSr&)rrrBr valuer r r _set_name|s zAttr._set_namecCs|jSr&)rr r r r _get_valueszAttr._get_valuecCs6||_||jd_|jdur&t|j||jd_dSr,)rr(rQrrBrr r r _set_values    zAttr._set_valuecCs|jSr&)rr r r r _get_prefixszAttr._get_prefixcCsd|j}|dkr&|r&|tkr&tjd||_|dur<|j}nd||jf}|jrZt|j||_ dS)Nxmlnsz5illegal use of 'xmlns' prefix for the wrong namespacez%s:%s) rrr7r8 NamespaceErrrrrrBr)r rZnsuriZnewNamer r r _set_prefixs  zAttr._set_prefixcCsv|j}|durR|j|j=|j|j|jf=|jrRd|_|jd8_|jj d8_ |j D] }| qX|j dd=dS)NFr2) r_attrsr_attrsNSrr_is_id_magic_id_nodesrY_magic_id_countr(rR)r elemrWr r r rRs   z Attr.unlinkcCsf|jr dS|j}|j}|dus&|dur*dS||}|dur@dS|jrV||j|jS||jSdSr) rrYr_get_elem_inforisIdNSrisIdrr rrinfor r r _get_isIds zAttr._get_isIdcCs\|j}|j}|dus|dur tS||}|dur6tS|jrL||j|jS||jSdSr&) rYr_no_typerrgetAttributeTypeNSrgetAttributeTyperrr r r _get_schemaTypes zAttr._get_schemaType) r|r}r~ __slots__r ATTRIBUTE_NODErrrrrPrr6rrrbrrrpropertyrrrrrrrrrrRrrr r r r rYs.   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 attrsZattrsNSrr r r rszNamedNodeMap.__init__cCs t|jSr&)lenrr r r r _get_lengthszNamedNodeMap._get_lengthcCs2z|t|j|WSty,YdS0dSr&)rsrkeys IndexErrorr r>r r r items zNamedNodeMap.itemcCs*g}|jD]}||j|jfq|Sr&)rvaluesrSrrr rVrIr r r rtszNamedNodeMap.itemscCs0g}|jD]}||j|jf|jfq|Sr&)rrrSrrrrr r r itemsNSszNamedNodeMap.itemsNScCs"t|tr||jvS||jvSdSr&) isinstancestrrrrkr r r __contains__s  zNamedNodeMap.__contains__cCs |jSr&)rrr r r r rszNamedNodeMap.keyscCs |jSr&)rrr r r r keysNSszNamedNodeMap.keysNScCs |jSr&)rrr r r r rszNamedNodeMap.valuesNcCs|j||Sr&rget)r rrr r r r szNamedNodeMap.getcCs:|jt|ddurdSt|t|kt|t|kSdS)Nrr)rgetattridrcr r r _cmpszNamedNodeMap._cmpcCs||dkSr,rrcr r r __eq__szNamedNodeMap.__eq__cCs||dkSr,rrcr r r __ge__szNamedNodeMap.__ge__cCs||dkSr,rrcr r r __gt__szNamedNodeMap.__gt__cCs||dkSr,rrcr r r __le__szNamedNodeMap.__le__cCs||dkSr,rrcr r r __lt__"szNamedNodeMap.__lt__cCs"t|tr|j|S|j|SdSr&)rr4rr)r attname_or_tupler r r __getitem__%s  zNamedNodeMap.__getitem__cCstt|trPz|j|}Wn.tyFt|}|jj|_||Yn0||_n t|tsbt d|}||dS)Nz%value must be a string or Attr object) rrrrjrrrY setNamedItemr TypeError)r attnamerrIr r r __setitem__,s    zNamedNodeMap.__setitem__cCs&z |j|WSty YdS0dSr&)rrjr rr r r getNamedItem;s  zNamedNodeMap.getNamedItemcCs*z|j||fWSty$YdS0dSr&)rrjr rrr r r getNamedItemNSAs zNamedNodeMap.getNamedItemNScCsX||}|durJt|j|j|j=|j|j|jf=t|drFd|_ |St j dSNr) rrBrrrrrrrrrr7r8r@r rnr r r removeNamedItemGs    zNamedNodeMap.removeNamedItemcCsZ|||}|durLt|j|j|j|jf=|j|j=t|drHd|_ |St j dSr) rrBrrrrrrrrrr7r8r@r rrrr r r removeNamedItemNSSs    zNamedNodeMap.removeNamedItemNScCstt|ts&tjdt|t|f|j|j}|r@| ||j|j<||j |j |j f<|j |_t|j|SrJ)rrr7r8r9r:rrrrRrrrrrrB)r rIror r r r_s   zNamedNodeMap.setNamedItemcCs ||Sr&)rr rIr r r setNamedItemNSlszNamedNodeMap.setNamedItemNScCs||}t|j|dSr&)rBrrR)r rrIr r r __delitem__os zNamedNodeMap.__delitem__cCs|j|j|jfSr&rr r r r __getstate__tszNamedNodeMap.__getstate__cCs|\|_|_|_dSr&rr stater r r __setstate__wszNamedNodeMap.__setstate__)N)!r|r}r~__doc__rrrrrtrrrrrr__len__rrrrrrrrrrrrrrrrrr r r r rs<    rZlengthz$Number of nodes in the NamedNodeMap.c@s0eZdZdZddZddZddZdd Zd S) TypeInfo namespacercCs||_||_dSr&r)r rrr r r rszTypeInfo.__init__cCs2|jrd|jj|j|jfSd|jj|jfSdS)Nz<%s %r (from %r)>z<%s %r>)r __class__r|rr r r r __repr__s  zTypeInfo.__repr__cCs|jSr&)rr r r r rszTypeInfo._get_namecCs|jSr&)rr r r r _get_namespaceszTypeInfo._get_namespaceN)r|r}r~rrrrrr r r r rs rc@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) rYr;rrrrrr(rrrDrENrcCsBd|_||_|_||_||_t|_d|_|_d|_ d|_ dSr&) r;rrrrrxr(rDrErr)r rrrrr r r rs  zElement.__init__cCs|jduri|_i|_dSr&)rrr r r r _ensure_attributess zElement._ensure_attributescCs2z|jWSty,|jdddYS0dSr)rrirrr r r r rbs zElement._get_localNamecCs|jSr&rr r r r _get_tagNameszElement._get_tagNamecCs@|jdur&t|jD] }|qd|_d|_t|dSr&)rrsrrRrr )r attrr r r rRs   zElement.unlinkcCs6|jdurdSz|j|jWSty0YdS0dS)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)rrrj)r rr r r getAttributes  zElement.getAttributecCs:|jdurdSz|j||fjWSty4YdS0dSr)rrrjrr r r getAttributeNSs   zElement.getAttributeNScCsV||}|dur4t|}||_|j|_||n||jkrR||_|jrRt|dSr&)getAttributeNoderrrYsetAttributeNoderrB)r rrr r r r setAttributes   zElement.setAttributecCst|\}}|||}|durHt||||}||_|j|_||n4||jkrf||_|jrft||j|kr|||_||_ dSr&) _nssplitgetAttributeNodeNSrrrYrrrBrr)r r qualifiedNamerr localnamer r r r setAttributeNSs     zElement.setAttributeNScCs|jdurdS|j|Sr&r)r attrnamer r r r s zElement.getAttributeNodecCs|jdurdS|j||fSr&)rrrr r r r s zElement.getAttributeNodeNScCs|jd|fvrtjd||j|jd}|durD|||j |j |j fd}|durt||urt||t ||||ur|S||ur|SdS)Nzattribute node already owned) rr7r8ZInuseAttributeErrrrrrremoveAttributeNoderrr_set_attribute_node)r r Zold1Zold2r r r rs    zElement.setAttributeNodecCsN|jdurtjz|j|}Wnty>tjYn0||dSr&)rr7r8r@rrjr)r rr r r r removeAttribute%s   zElement.removeAttributecCsR|jdurtjz|j||f}WntyBtjYn0||dSr&)rr7r8r@rjr)r rrr r r r removeAttributeNS.s   zElement.removeAttributeNScCs\|durtjz|j|jWnty>tjYn0t|||j|_|Sr&) r7r8r@rrrjrBrRrYrr r r r7s  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. NFrrr r r hasAttributeGs zElement.hasAttributecCs|jdurdS||f|jvSNF)rrr r r hasAttributeNSQs zElement.hasAttributeNScCst||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. rrxrr r r getElementsByTagNameVszElement.getElementsByTagNamecCst|||tSr&rrxrr r r getElementsByTagNameNS^s zElement.getElementsByTagNameNScCsd|jt|fS)Nz)rrr r r r rbszElement.__repr__rcCs||d|j|}|D],}|d|t|||j|dq$|jr|dt|jdkr|jdjt j t j fvr|jd |dddn4|||jD]}| |||||q|||d|j|fn|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="rrr2rrz%sz/>%sN) rr_get_attributesrrrr(rrr rPrr )r r%r# addindentr$rZa_namerIr r r r es(        zElement.writexmlcCs|t|j|j|Sr&)rrrrr r r r r"szElement._get_attributescCs|jr dSdSdSrrr r r r hasAttributesszElement.hasAttributescCs||}||dSr&)r setIdAttributeNode)r ridAttrr r r setIdAttributes zElement.setIdAttributecCs|||}||dSr&)rr%)r rrr&r r r setIdAttributeNSs zElement.setIdAttributeNScCsj|dus||jstjt|dur4tj|jsfd|_|jd7_|j j d7_ t |dS)NTr2) rerr7r8r@_get_containing_entrefNoModificationAllowedErrrrrYrrB)r r&r r r r%s   zElement.setIdAttributeNode)rrr).r|r}r~rr rTrrrrrrrrPrrr6rrrrbr rRr r rrr rrZsetAttributeNodeNSrrrZremoveAttributeNodeNSrrrr!rr r"r$r'r(r%r r r r rsT      rrz*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.cCs8t||||j|j<||j|j|jf<||_dSr&)rBrrrrrrr)elementr r r r rs  rc@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 NcCsdSr&r r r r r r-szChildless._get_firstChildcCsdSr&r r r r r r0szChildless._get_lastChildcCstj|jddS)Nz nodes cannot have childrenr7r8r9rrr r r r=szChildless.appendChildcCsdSrr r r r r r)szChildless.hasChildNodescCstj|jddSNz nodes do not have childrenr-r rFrGr r r r5szChildless.insertBeforecCstj|jddSr.)r7r8r@rrOr r r r<szChildless.removeChildcCsdSr&r r r r r rUszChildless.normalizecCstj|jddSr.r-r rFrLr r r rMszChildless.replaceChild)r|r}r~rrrZ EmptyNodeListr(rrr-r0r=r)r5r<rUrMr r r r r,sr,c@s\eZdZejZdZddZddZddZ e ee Z dd Z d d Z e e e Zdd dZdS)ProcessingInstructiontargetrQcCs||_||_dSr&r2)r r3rQr r r rszProcessingInstruction.__init__cCs|jSr&rQr r r r _get_nodeValuesz$ProcessingInstruction._get_nodeValuecCs ||_dSr&r4rr r r _set_nodeValuesz$ProcessingInstruction._set_nodeValuecCs|jSr&r3r r r r _get_nodeNamesz#ProcessingInstruction._get_nodeNamecCs ||_dSr&r7rr r r _set_nodeNamesz#ProcessingInstruction._set_nodeNamercCs|d||j|j|fdS)Nz %s%s)rr3rQr r%r#r#r$r r r r szProcessingInstruction.writexmlN)rrr)r|r}r~r rrrrr5r6rrr8r9rr r r r r r1s  r1c@sreZdZdZddZddZeZddZdd Ze eeZ Z d d Z d d Z ddZddZddZddZdS) CharacterData)_datarYr;rErDcCs,d|_|_d|_|_d|_t|dSr)rYr;rErDr<r rr r r r rs  zCharacterData.__init__cCs t|jSr&)rrQr r r r rszCharacterData._get_lengthcCs|jSr&r<r r r r _get_dataszCharacterData._get_datacCs ||_dSr&r=r rQr r r _set_dataszCharacterData._set_datacCs6|j}t|dkrd}nd}d|jj|dd|fS)N z...rzr)rQrrr|)r rQZ dotdotdotr r r r s zCharacterData.__repr__cCsT|dkrtjd|t|jkr.tjd|dkrBtjd|j|||SNroffset cannot be negative#offset cannot be beyond end of datacount cannot be negativer7r8 IndexSizeErrrrQr offsetcountr r r substringDatas   zCharacterData.substringDatacCs|j||_dSr&r4)r argr r r appendDataszCharacterData.appendDatacCsZ|dkrtjd|t|jkr.tjd|rVd|jd|||j|df|_dS)NrrCrD%s%s%srF)r rIrLr r r insertData!s  zCharacterData.insertDatacCsl|dkrtjd|t|jkr.tjd|dkrBtjd|rh|jd||j||d|_dSrBrFrHr r r deleteData*s   zCharacterData.deleteDatacCsr|dkrtjd|t|jkr.tjd|dkrBtjd|rnd|jd|||j||df|_dS)NrrCrDrErNrF)r rIrJrLr r r replaceData4s   zCharacterData.replaceDataN)r|r}r~rrrrr>r@rrQrrrKrMrOrPrQr r r r r;s    r;zLength of the string data.c@sHeZdZdZejZdZdZddZ dddZ d d Z d d Z d dZ dS)rr z#textNcCs|dks|t|jkr"tjd|}|j|d|_|j|_|j}|jr~||jj vr~|durp|j |n|j |||jd||_|S)Nrzillegal offset value) rrQr7r8rGrrYrDr;r(r=r5)r rIZnewTextnextr r r splitTextIs zText.splitTextrcCst|d||j|fdS)NrN)rrQr:r r r r Xsz Text.writexmlcCs|jg}|j}|durB|jtjtjfvrB|d|j|j}qqBq|j}|durz|jtjtjfvrz||j|j}qHqzqHd |S)Nrr) rQrErr rPrrCrDrSjoin)r rVrr r r _get_wholeText]s zText._get_wholeTextcCs|j}|j}|dur@|jtjtjfvr@|j}|||}q q@q |j}|sT|||dur|jtjtjfvr|j}|||}qTqqT|r||_|SdSdSr&) r;rErr rPrr<rDrQ)r ZcontentrrrRr r r replaceWholeTextos*   zText.replaceWholeTextcCsF|jrdSt|}|dur"dS|j|}|dur:dS|SdSr)rQstrip_get_containing_elementrYrisElementContent)r rrr r r !_get_isWhitespaceInElementContents  z&Text._get_isWhitespaceInElementContent)rrr)r|r}r~rr rPrrrrSr rUrVrZr r r r rBs rZisWhitespaceInElementContentzKTrue iff this text node contains only whitespace and is in element content.Z wholeTextz.The text of all logically-adjacent text nodes.cCs*|j}|dur&|jtjkr|S|j}qdSr&)r;rr rTrIrHr r r rXs  rXcCs*|j}|dur&|jtjkr|S|j}qdSr&)r;rr rr[r r r r)s  r)c@s(eZdZejZdZddZdddZdS) Commentz#commentcCst|||_dSr&)r;rr<r?r r r rs zComment.__init__rcCs,d|jvrtd|d||j|fdS)Nz--z%'--' is not allowed in a comment nodez %s%s)rQr?rr:r r r r s zComment.writexmlN)rrr) r|r}r~r rrrrr r r r r r\sr\c@s$eZdZdZejZdZdddZdS) CDATASectionr z#cdata-sectionrcCs,|jddkrtd|d|jdS)Nz]]>rz$']]>' not allowed in a CDATA sectionz)rQfindr?rr:r r r r szCDATASection.writexmlN)rrr) r|r}r~rr rrrr r r r r r]sr]c@szeZdZdZdddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdS)ReadOnlySequentialNamedNodeMap_seqr cCs ||_dSr&r`)r seqr r r rsz'ReadOnlySequentialNamedNodeMap.__init__cCs t|jSr&rrar r r r rsz&ReadOnlySequentialNamedNodeMap.__len__cCs t|jSr&rcr r r r rsz*ReadOnlySequentialNamedNodeMap._get_lengthcCs"|jD]}|j|kr|SqdSr&)rarrr r r rs  z+ReadOnlySequentialNamedNodeMap.getNamedItemcCs,|jD] }|j|kr|j|kr|SqdSr&)rarrrr r r rs z-ReadOnlySequentialNamedNodeMap.getNamedItemNScCs4t|tr|j|}n ||}|dur0t||Sr&)rr4rrrj)r Z name_or_tuplerIr r r rs    z*ReadOnlySequentialNamedNodeMap.__getitem__cCs2|dkr dSz |j|WSty,YdS0dSr,)rarrr r r rs   z#ReadOnlySequentialNamedNodeMap.itemcCstjddSNz"NamedNodeMap instance is read-onlyr7r8r*rr r r rsz.ReadOnlySequentialNamedNodeMap.removeNamedItemcCstjddSrdrerr r r rsz0ReadOnlySequentialNamedNodeMap.removeNamedItemNScCstjddSrdrerr r r rsz+ReadOnlySequentialNamedNodeMap.setNamedItemcCstjddSrdrerr r r rsz-ReadOnlySequentialNamedNodeMap.setNamedItemNScCs|jgSr&r`r r r r rsz+ReadOnlySequentialNamedNodeMap.__getstate__cCs|d|_dSr,r`rr r r rsz+ReadOnlySequentialNamedNodeMap.__setstate__N)r )r|r}r~rrrrrrrrrrrrrrr r r r r_s  r_z&Number of entries in the NamedNodeMap.c@s,eZdZdZdZddZddZddZd S) Identifiedz@Mix-in class that supports the publicId and systemId attributes.publicIdsystemIdcCs||_||_dSr&rg)r rhrir r r _identified_mixin_initsz!Identified._identified_mixin_initcCs|jSr&)rhr r r r _get_publicIdszIdentified._get_publicIdcCs|jSr&)rir r r r _get_systemIdszIdentified._get_systemIdN)r|r}r~rrrjrkrlr r r r rf s rfc@sHeZdZejZdZdZdZdZ dZ ddZ ddZ ddZ d d d ZdS) DocumentTypeNcCs2t|_t|_|r&t|\}}||_|j|_dSr&)r_entities notationsrrr)r rrrr r r r"s  zDocumentType.__init__cCs|jSr&)internalSubsetr r r r _get_internalSubset*sz DocumentType._get_internalSubsetcCs|jdurtd}|j|_|j|_tjjj}|rg|j_ g|j _ |j j D]2}t |j|j |j }|j j |||||qH|jj D]N}t|j|j |j |j}|j|_|j|_|j|_|jj |||||q|||||SdSdSr&)rYrmrrr7r8UserDataHandler NODE_CLONEDrnraroNotationrhrirSrwEntity notationNameactualEncodingrr`)r rZclonerurnotationeentityr r r r[-s0    zDocumentType.cloneNodercCs|d||j|jr8|d||j||jfn|jrR|d||jf|jdur||d||j|d|d|dS)Nz        z DOMImplementation.createDocumentcCst|}||_||_|Sr&)rmrhri)r rrhrirr r r createDocumentTypesz$DOMImplementation.createDocumentTypecCs||dr|SdSdSr&)r]rfr r r rgs zDOMImplementation.getInterfacecCstSr&)Documentr r r r rsz"DOMImplementation._create_documentN) r|r}r~rr]rrrgrr r r r rs  -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. rcCs ||_dSr&rrr r r rszElementInfo.__init__cCstSr&rr Zanamer r r rszElementInfo.getAttributeTypecCstSr&rrr r r rszElementInfo.getAttributeTypeNScCsdSrr r r r r rYszElementInfo.isElementContentcCsdS)zQReturns true iff this element is declared to have an EMPTY content model.Fr r r r r isEmptyszElementInfo.isEmptycCsdS)z7Returns true iff the named attribute is a DTD-style ID.Fr rr r r rszElementInfo.isIdcCsdS)z|jtjkr|jd|_nt|r:|jjd|j_dSr&)rr r _id_cacheclear_id_search_stackrrYrr r r rBs    rBc@sreZdZdZejejejejfZ e Z ej Z dZdZdZdZdZZdZdZdZdZdZdZdZdZddZdd Zd d Zd d ZddZ ddZ!ddZ"ddZ#ddZ$ddZ%ddZ&ddZ'ddZ(d d!Z)d"d#Z*d$d%Z+d&d'Z,d(d)Z-d*d+Z.d,d-Z/d.d/Z0d0d1Z1d2d3Z2d4d5Z3d6d7Z4d8d9Z5d:d;Z6dd?Z8d@dAZ9dBdCZ:dIdEdFZ;dGdHZ|j||jtj kr^| r^tjdt ||S)Nr1z two document elements disallowed) rr6r7r8r9r:r;r<r rT_get_documentElementr=rr r r r=Ks    zDocument.appendChildcCsTz|j|Wnty,tjYn0d|_|_d|_|j |urPd|_ |Sr&) r(rNr?r7r8r@rDrEr;documentElementrOr r r r<[s   zDocument.removeChildcCs$|jD]}|jtjkr|SqdSr&)r(rr rTrr r r rgs  zDocument._get_documentElementcCs(|jdur|jd|_t|dSr&)rrRr r r r r rRls  zDocument.unlinkcCs|sdS|jddd}|j|_|j|_|j|_|jD]B}t|||}|j||jt j kr`n|jt j krr||_ ||_ q6|tjjj|||Sr&)r\rrrr`r(rXrSrr rr}rr;rwr7r8rrrs)r rZrxrZ childcloner r r r[rs$      zDocument.cloneNodecCst}||_|Sr&)rrY)r rpr r r createDocumentFragmentszDocument.createDocumentFragmentcCst|}||_|Sr&)rrY)r rrzr r r createElementszDocument.createElementcCs(t|tstdt}||_||_|SNznode contents must be a string)rrrrrQrY)r rQtr r r createTextNodes  zDocument.createTextNodecCs(t|tstdt}||_||_|Sr)rrrr]rQrYr rQrHr r r createCDATASections  zDocument.createCDATASectioncCst|}||_|Sr&)r\rYrr r r createCommentszDocument.createCommentcCst||}||_|Sr&)r1rY)r r3rQpr r r createProcessingInstructions z$Document.createProcessingInstructioncCst|}||_d|_|Sr)rrYr)r rar r r createAttributeszDocument.createAttributecCs"t|\}}t|||}||_|Sr&)rrrY)r rrrrrzr r r rs  zDocument.createElementNScCs*t|\}}t||||}||_d|_|Sr)rrrYr)r rrrrrr r r createAttributeNSs  zDocument.createAttributeNScCst||||}||_|Sr&)rurY)r rrhrirvrzr r r _create_entityszDocument._create_entitycCst|||}||_|Sr&)rtrY)r rrhrirr r r _create_notations zDocument._create_notationcCs||jvr|j|S|js$|js$dS|j}|durB|jg}||_n|sJdSd}|r|}|dd|jD||}|rB|j D]}|j r| |j |j r||j|j<|j|kr|}n |jsqq||jr ||j|j<|j|kr|}n|js>qq|jr||j|j<|j|kr.|}q|jdkrqqn>|jr|j D]*}|jrT||j|j<|j|krT|}qT|durNqqN|S)NcSsg|]}|jtvr|qSr )rrA).0rWr r r s z+Document.getElementById..r2)rrrrrpopextendr(rrrrrrrrrrr)r rstackresultrIrr r r r getElementByIdsZ              zDocument.getElementByIdcCst||tSr&rrr r r rszDocument.getElementsByTagNamecCst|||tSr&r rr r r r!s zDocument.getElementsByTagNameNScCs|j||Sr&)r\r]r^r r r ra szDocument.isSupportedcCs>|jtjkrtjdn|jtjkr2tjdt|||S)Nzcannot import document nodesz!cannot import document type nodes)rr rr7r8NotSupportedErrr}rX)r rIrZr r r importNodes    zDocument.importNoderc Csxg}|r|d|d|dur<|d|r0dndd|dd|d||jD]}|||||q^dS) Nz encoding="rz standalone="ZyesZnoz)rSrrTr(r ) r r%r#r#r$rrZ declarationsrIr r r r s zDocument.writexmlcCsJ|j|ur tjd||jf|jtjtjfvr>tjd|t krd|vr| dd\}}|dkr|tjj krtj dq|dkr|tjj kr|jtjkrtj dd}|}nd}d}|jtjkr|j }|dur|j}||nd}||_||_||_||_|jtjkr||_n*||_|durF|||rF|||S)Nz?cannot rename nodes from other documents; expected %s, found %sz8renameNode() only applies to element and attribute nodesrr2rzillegal use of 'xmlns' prefixz$illegal use of the 'xmlns' attribute)rYr7r8rrr rTrrrrrrrrrrrrrrrrr%)r rrrrrr+Zis_idr r r renameNode&sb         zDocument.renameNode)rrrNN)=r|r}r~rr rTrrr}r6rr\rrrrrr;rErDrwrrr`rrrrrrrrrrrrrrr=r<rrRr[rrrrrrrrrrrrrr!rarr rr r r r rsl   : rrz#Top-level element of this document.c Cs|j|rtjjj}n tjjj}|jtj kr| |j |j }|j D]0}||j |j |j||j |j}|j|_qH|r|jD]}t|||}||qn|jtjkr|}|r|jD]}t|||}||qn|jtjkr||j}n|jtjkr||j}n|jtjkr>||j |j}nj|jtj!kr\|"|j}nL|jtj#kr|$|j |j }d|_|j|_n|jtj%krtjjj}|j&'|j(|j)|j*}||_|rg|j+_,g|j-_,|j-j,D]F} t.| j | j)| j*} || _|j-j,/| t0| dr| 1|| | q|j+j,D]b} t2| j | j)| j*| j3} | j4| _4| j5| _5| j6| _6|| _|j+j,/| t0| dr.| 1|| | q.ntj7dt8|t0|dr|1||||S)zo Clone a node and give it the new owner document. Called by Node.cloneNode and Document.importNode TrwzCannot clone node %s)9rYrer7r8rrrsZ NODE_IMPORTEDrr rTrrrrrrrrrrr(rXr=r3rrPrrQrrrrr3rrrrr}r\rrrhrirnrarortrSrrrwrurvrwrr`rr:) rIrZZnewOwnerDocumentrurxr rrWrHrryrzr{r r r rX_s                   rXcCs,|dd}t|dkr|Sd|dfSdS)Nrr2r)rr)rfieldsr r r rs  rcCs0||i|}|\}}||||Sr&)ZgetEventZ expandNoder)funcargskwargsZeventsZtoktypeZrootNoder r r _do_pulldom_parses   rcCsH|dur"|s"ddlm}||Sddlm}t|j|f||dSdS)z3Parse a file into a DOM by filename or file object.Nr expatbuilderpulldom)parserbufsize)xml.domrparserr)filerrrrr r r rs     rcCsB|durddlm}||Sddlm}t|j|fd|iSdS)z&Parse a file into a DOM from a string.Nrrrr)rr parseStringrr)stringrrrr r r rs    rcCs@|r:t|trt|}|D]\}}tj||sdSqtjSr&)rrrZ_parse_feature_stringrr\r])Zfeaturesfvr r r getDOMImplementations   r)NN)N)N)7rrrr7rrrrZxml.dom.minicompatZxml.dom.xmlbuilderrrr8r rTrrAZ defpropertyrKrrrrrrobjectrZ AttributeListrrrrr,r1r;rrXr)r\r]r_rfrmrurtrrrBrrXrrrrrr r r r sw  y$  )GU  ><( O*UR