我试图在一个已经存在的xml文件中的特定位置注入一个小的xml结构。
<not>
<elt>
<isVal>Y</isVal>
</elt>
</not>
我的代码是这样的
import lxml.etree as ElementTree;
tree = ElementTree.ElementTree()
tree.parse(file_path)
root = tree.getroot();
ruleElement = tree.find('.//rule');
for child_n in ruleElement:
if (child_n.tag == 'and'):
print "Found rule - and"
ruleElement.insert(0, tree.XML("<not><elt><isVal>Y</isVal></elt></not>"))
我得到了以下错误:AttributeError: 'lxml.etree._ElementTree' object has no attribute 'XML'.
我也试过。
for child_n in ruleElement:
if (child_n.tag == 'and'):
print "Found rule - and"
child_n.Element(child_n, 'test_insert').text = 'test'
child_n.insert(1, item[0])
结果是:AttributeError: 'lxml.etree._ElementTree' object has no attribute 'Element'(元素).
试着把它作为SubElement,得到了同样的错误信息。AttributeError: 'lxml.etree._Element' object has no attribute 'SubElement'(属性错误)。
我从其他类似的问题中得到了如何做的想法,但它似乎不想接受Element、SubElement或XML作为可接受的属性。 我到底做错了什么?
我使用的是Python 2.6,升级是不可能的。
你需要使用 "元素 "来创建 lxml.etree.SubElement
:
import lxml.etree
xml = lxml.etree.parse('xyz.xml')
root = xml.getroot()
nt = lxml.etree.SubElement(root, 'not') # add to the XML root!
elt = lxml.etree.SubElement(nt, 'elt')
isVal = lxml.etree.SubElement(elt, 'isVal')
isVal.text = 'Y'
with open("xyz2.xml", 'wb') as f:
f.write(lxml.etree.tostring(root, xml_declaration=True, encoding="utf-8"))
print(open("xyz2.xml", 'r').read())
产出:
<?xml version='1.0' encoding='utf-8'?>
<note>
<to>abc</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Party</body>
<not><elt><isVal>Y</isVal></elt></not></note>