MINI MINI MANI MO
3
\ @ s d Z ddlZddlZddlmZmZmZmZ ddlT ddl m
Z
mZ ejj
jejj
jfZG dd dejj
Z
ee
dd d
ee
ddd
ee
d
dd
dd Zdd Zdd Zdd Zdd ZG dd de
ZG dd de
Zeeddd
eed
dd
eed d!d
G d"d# d#eZeed$d%d
eZG d&d' d'eZeddZG d(d) d)e
Zeed*d+d
eed
d,d
d-d. ZG d/d0 d0Z G d1d2 d2e e
Z!G d3d4 d4e e
Z"ee"d$d5d
G d6d7 d7e"Z#ee#d8d9d
ee#d:d;d
d<d= Z$d>d? Z%G d@dA dAe"Z&G dBdC dCe#Z'G dDdE dEeZ(ee(d$dFd
G dGdH dHZ)G dIdJ dJe)e e
Z*G dKdL dLe)e
Z+G dMdN dNe)e e
Z,G dOdP dPe
Z-G dQdR dReZ.dSdT Z/G dUdV dVe
eZ0ee0dWdXd
dYdZ Z1d[d\ Z2d]d^ Z3ded_d`Z4dfdadbZ5dgdcddZ6dS )hac Simple implementation of the Level 1 DOM.
Namespaces and other minor Level 2 features are also supported.
parse("foo.xml")
parseString("<foo><bar/></foo>")
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_NAMESPACEEMPTY_PREFIXXMLNS_NAMESPACEdomreg)*)DOMImplementationLS
DocumentLSc @ s e Zd ZdZdZdZdZdZeZ dd Z
d2ddZd3dd Zd
d Z
dd
Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Z dS )4NodeNc C s dS )NT )selfr
r
'/usr/lib64/python3.6/xml/dom/minidom.py__bool__+ s z
Node.__bool__c C s | j dd|S )N )toprettyxml)r encodingr
r
r toxml. s z
Node.toxml
c C sx |d krt j }nt jt j |ddd}| jtjkrH| j|d||| n| j|d|| |d krh|j S |j j S d S )Nxmlcharrefreplacer )r errorsnewliner )
ioStringIO
TextIOWrapperBytesIOnodeTyper
DOCUMENT_NODEwritexmlgetvaluedetach)r indentnewlr writerr
r
r r 1 s
zNode.toprettyxmlc C s
t | jS )N)bool
childNodes)r r
r
r
hasChildNodesC s zNode.hasChildNodesc C s | j S )N)r$ )r r
r
r _get_childNodesF s zNode._get_childNodesc C s | j r| j d S d S )Nr )r$ )r r
r
r _get_firstChildI s zNode._get_firstChildc C s | j r| j d S d S )N )r$ )r r
r
r _get_lastChildM s zNode._get_lastChildc C s |j | jkr0xt|jD ]}| j|| qW |S |j | jkrXtjjdt |t | f |j
d k rn|j
j| |d kr| j| ny| jj
|}W n tk
r tjj Y nX |j tkrt| | jj|| ||_||_|r| j|d }||_||_nd |_| |_
|S )Nz%s cannot be child of %sr( )r DOCUMENT_FRAGMENT_NODEtupler$ insertBefore_child_node_typesxmldomHierarchyRequestErrrepr
parentNoderemoveChildappendChildindex
ValueErrorNotFoundErr_nodeTypes_with_children_clear_id_cacheinsertnextSiblingpreviousSibling)r newChildrefChildcr6 noder
r
r r- Q s6
zNode.insertBeforec C s |j | jkr.xt|jD ]}| j| qW |S |j | jkrXtjjdt |t | f n|j t
krjt| |jd k r|jj
| t| | d |_|S )Nz%s cannot be child of %s)r r+ r, r$ r5 r. r/ r0 r1 r2 r9 r: r3 r4
_append_childr<