Python中插入lxml树的AttributeError

2024-06-16 17:17:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一个小的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.\u ElementTree'对象没有属性“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.\u ElementTree'对象没有属性'Element'

尝试将其作为子元素,但收到相同的错误消息: AttributeError:'lxml.etree.\u Element'对象没有属性'SubElement'

我从其他类似的问题中得到了如何实现的想法,但它似乎不想接受元素、子元素或XML作为可接受的属性。我做错了什么

我使用的是Python2.6,升级不是一个选项


Tags: andchildtree属性notxmlrulelxml
1条回答
网友
1楼 · 发布于 2024-06-16 17:17:45

您需要使用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>

相关问题 更多 >