관리-도구
편집 파일: builder.cpython-39.pyc
a ������a'����������������������@���s����d�Z�ddlmZ�ddlmZ�ddlmZ�ze�W�n�e yF���e ZY�n0�ze�W�n�e yf���e ZY�n0�G�dd��de�Z e ��ZdS�)z9 The ``E`` Element factory for generating XML documents. �����)�absolute_importN��partialc�������������������@���s*���e�Zd�ZdZd dd�Zdd��Zdd��ZdS�) �ElementMakerac��Element generator factory. Unlike the ordinary Element factory, the E factory allows you to pass in more than just a tag and some optional attributes; you can also pass in text and other elements. The text is added as either text or tail attributes, and elements are inserted at the right spot. Some small examples:: >>> from lxml import etree as ET >>> from lxml.builder import E >>> ET.tostring(E("tag")) '<tag/>' >>> ET.tostring(E("tag", "text")) '<tag>text</tag>' >>> ET.tostring(E("tag", "text", key="value")) '<tag key="value">text</tag>' >>> ET.tostring(E("tag", E("subtag", "text"), "tail")) '<tag><subtag>text</subtag>tail</tag>' For simple tags, the factory also allows you to write ``E.tag(...)`` instead of ``E('tag', ...)``:: >>> ET.tostring(E.tag()) '<tag/>' >>> ET.tostring(E.tag("text")) '<tag>text</tag>' >>> ET.tostring(E.tag(E.subtag("text"), "tail")) '<tag><subtag>text</subtag>tail</tag>' Here's a somewhat larger example; this shows how to generate HTML documents, using a mix of prepared factory functions for inline elements, nested ``E.tag`` calls, and embedded XHTML fragments:: # some common inline elements A = E.a I = E.i B = E.b def CLASS(v): # helper function, 'class' is a reserved word return {'class': v} page = ( E.html( E.head( E.title("This is a sample document") ), E.body( E.h1("Hello!", CLASS("title")), E.p("This is a paragraph with ", B("bold"), " text in it!"), E.p("This is another paragraph, with a ", A("link", href="http://www.python.org"), "."), E.p("Here are some reserved characters: <spam&egg>."), ET.XML("<p>And finally, here is an embedded XHTML fragment.</p>"), ) ) ) print ET.tostring(page) Here's a prettyprinted version of the output from the above script:: <html> <head> <title>This is a sample document</title> </head> <body> <h1 class="title">Hello!</h1> <p>This is a paragraph with <b>bold</b> text in it!</p> <p>This is another paragraph, with <a href="http://www.python.org">link</a>.</p> <p>Here are some reserved characters: <spam&egg>.</p> <p>And finally, here is an embedded XHTML fragment.</p> </body> </html> For namespace support, you can pass a namespace map (``nsmap``) and/or a specific target ``namespace`` to the ElementMaker class:: >>> E = ElementMaker(namespace="http://my.ns/") >>> print(ET.tostring( E.test )) <test xmlns="http://my.ns/"/> >>> E = ElementMaker(namespace="http://my.ns/", nsmap={'p':'http://my.ns/'}) >>> print(ET.tostring( E.test )) <p:test xmlns:p="http://my.ns/"/> Nc��������������������s����|d�urd|�d�|�_�nd�|�_�|r.t|�|�_nd�|�_|d�urPt|�sHJ��||�_ntj|�_��rft�����ni���dd��}dd��}t��vr�|��t<�t��vr�|��t<�tj ��vr�|��tj <���fdd�}t��vr�|��t<���|�_ d�S�) N�{�}c�����������������S���sD���z|�d�j�pd|�|�d�_�W�n"�ty>���|�jp2d|�|�_Y�n0�d�S�)N�����)�tail� IndexError�text)�elem�item��r����2/usr/lib64/python3.9/site-packages/lxml/builder.py�add_text����s����z'ElementMaker.__init__.<locals>.add_textc�����������������S���s���|�j�rtd|�j����||�_�d�S�)Nz<Can't add a CDATA section. Element already has some text: %r)r���� ValueError)r ���Zcdatar���r���r���� add_cdata����s����z(ElementMaker.__init__.<locals>.add_cdatac��������������������sF���|�j�}|���D�]2\}}t|t�r*|||<�q��t|��d�|�||<�qd�S��N)�attrib�items� isinstance� basestring�type)r ���r���r����k�v��typemapr���r����add_dict����s ���� z'ElementMaker.__init__.<locals>.add_dict)� _namespace�dict�_nsmap�callable�_makeelement�ETZElement�str�unicodeZCDATA�_typemap)�selfr���� namespace�nsmapZmakeelementr���r���r���r���r���r����__init__����s2���� zElementMaker.__init__c����������� ������O���s����|�j�}|�jd�ur&|d�dkr&|�j|�}|�j||�jd�}|rH|t�||��|D�]�}t|�r^|��}|�t|��}|d�u�r�t� |�r�|� |��qLt|�jD�]}|�|�}|d�ur��q�q�tdt|�j |f���|||�} | rL|�t| ��|| ��qL|S�)Nr���r���)r*���zbad argument type: %s(%r))r'���r���r#���r!���r ���r"����getr���r$���Z iselement�append�__mro__� TypeError�__name__) r(����tagZchildrenr���r���r ���r����tZbasetyper���r���r���r����__call__����s2���� � zElementMaker.__call__c�����������������C���s ���t�|�|�S�r���r���)r(���r1���r���r���r����__getattr__����s����zElementMaker.__getattr__)NNNN)r0���� __module__�__qualname__�__doc__r+���r3���r4���r���r���r���r���r���;���s���X��� 7r���)r7���Z __future__r���Z lxml.etreeZetreer$���� functoolsr���r���� NameErrorr%���r&����objectr����Er���r���r���r����<module>&���s��� �5