我可以像这样使用EM:
myE = objectify.ElementMaker(namespace="http://www.vinoxml.org/XMLschema",
nsmap={None : "http://www.vinoxml.org/XMLschema"})
docO = myE.query(myE.querycreator())
docO.querycreator.name = objectify.DataElement(u"The Wine Cellar Book - version %s"
% 15.1)
XML的内容是动态生成的,所以我希望能够按照这些方式进行,但是我得到了一个“没有这样的孩子”。 on' querycreator'当试图添加'名称' DataElement。令我困惑的是“查询工具”。在' docO'在我添加了' SubElement'之后。
myE = objectify.ElementMaker(namespace="http://www.vinoxml.org/XMLschema",
nsmap={None : "http://www.vinoxml.org/XMLschema"})
docO = myE.query()
qc = objectify.SubElement(docO, 'querycreator')
docO.querycreator.name = objectify.DataElement(u"The Wine Cellar Book - version %s"
% 15.1)
objectify.deannotate(docO)
etree.cleanup_namespaces(docO)
print(etree.tostring(docO, pretty_print=True,
encoding="UTF-8", xml_declaration=True))
答案 0 :(得分:0)
仅用于存档。我所有这一切的目标是从Amara 2转移到lxml。 我最终这样做了:
doc_header = """<query xmlns="http://www.vinoxml.org/XMLschema"></query>"""
nsVinoXML = u"{http://www.vinoxml.org/XMLschema}"
docO = objectify.fromstring(doc_header)
qc = objectify.SubElement(docO, nsVinoXML + u"querycreator")
qc.name = (u"The Wine Cellar Book - version %s"
% 15.1)
qc.someint = 12
qc.somefloat = 21.2
qc.refcode = 1332322
qc.refcode.addattr('source', 'someone')
换句话说,只需要用“nsVinoXML”(即命名空间)作为前缀。