在Python中插入lxml树的属性错误。

问题描述 投票:0回答:1

我试图在一个已经存在的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,升级是不可能的。

python lxml
1个回答
1
投票

你需要使用 "元素 "来创建 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>
© www.soinside.com 2019 - 2024. All rights reserved.