Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—如何使用lxml.objectify多次附加相同的XML元素_Python_Lxml - Fatal编程技术网

Python—如何使用lxml.objectify多次附加相同的XML元素

Python—如何使用lxml.objectify多次附加相同的XML元素,python,lxml,Python,Lxml,我正在尝试使用lxml.objectify重新创建以下XML 当然,它只输出结果XML中的一部分电话信息。有人有什么想法吗?您应该创建objectify.Element对象,并将它们添加为root.customers的子对象 例如,可以这样插入两个电话号码: phone = objectify.Element('phone') phone.type = data_dict['PRIMARY PHONE1'] phone.number = data_dict['PRIMARY PHONE TYPE

我正在尝试使用lxml.objectify重新创建以下XML


当然,它只输出结果XML中的一部分电话信息。有人有什么想法吗?

您应该创建
objectify.Element
对象,并将它们添加为
root.customers
的子对象

例如,可以这样插入两个电话号码:

phone = objectify.Element('phone')
phone.type = data_dict['PRIMARY PHONE1']
phone.number = data_dict['PRIMARY PHONE TYPE 1']
root.customers.customer.append(phone)

phone = objectify.Element('phone')
phone.type = data_dict['PRIMARY PHONE2']
phone.number = data_dict['PRIMARY PHONE TYPE 2']
root.customers.customer.append(phone)
如果在将xml转换回字符串时在这些元素上获得不必要的属性,请使用
objectify.deannotate(root,xsi_nil=True,cleanup_namespace=True)
。 有关
objectify.deannotate
的确切参数,请参阅

(如果您使用的是旧版本的lxml,它不包括
cleanup\u namespaces
关键字参数,请改为:

from lxml import etree
# ...
objectify.deannotate(root, xsi_nil=True)
etree.cleanup_namespaces(root)

)

以下是一些示例代码,用于构造XML:


我已经在这里硬编码了它,但是你可以在你的数据上转换成一个循环。这对您有用吗?

实际上,我需要将3个电话号码添加到一个客户,但感谢您提供有关元素对象的信息。哎呀!我相应地改变了答案;)我想这是可行的,但我必须重新设计我的代码。不过,我可能会用它来做别的事情。谢谢
phone = objectify.Element('phone')
phone.type = data_dict['PRIMARY PHONE1']
phone.number = data_dict['PRIMARY PHONE TYPE 1']
root.customers.customer.append(phone)

phone = objectify.Element('phone')
phone.type = data_dict['PRIMARY PHONE2']
phone.number = data_dict['PRIMARY PHONE TYPE 2']
root.customers.customer.append(phone)
from lxml import etree
# ...
objectify.deannotate(root, xsi_nil=True)
etree.cleanup_namespaces(root)
from lxml import etree
from lxml import objectify

E = objectify.E

fileElem = E.file(
    E.customers(
        E.customer(
            E.phone(
                E.type('home'),
                E.number('555-555-5555')
            ),
            E.phone(
                E.type('cell'),
                E.number('999-999-9999')
            ),
            E.phone(
                E.type('home'),
                E.number('111-111-1111')
            )
        )
    )
)

print(etree.tostring(fileElem, pretty_print=True))