Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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-修改属性_Python_Xml_Lxml - Fatal编程技术网

python lxml-修改属性

python lxml-修改属性,python,xml,lxml,Python,Xml,Lxml,目标:我更希望看到lxml.objectify与Xpath解决方案,但我会接受其他基于lxml的解决方案 这些文件是import lxml.etree as et tree=et.fromstring(“”) …您的xml。。。 ''') 对于树.xpath中的主机ip(“/scenario/init/send/command[@name='CER']/avp[@name='host-ip-Address']”): 主机ip.attrib['value']='foo' 打印et.tostring

目标:我更希望看到lxml.objectify与Xpath解决方案,但我会接受其他基于lxml的解决方案

这些文件是
import lxml.etree as et
tree=et.fromstring(“”)
…您的xml。。。
''')
对于树.xpath中的主机ip(“/scenario/init/send/command[@name='CER']/avp[@name='host-ip-Address']”):
主机ip.attrib['value']='foo'
打印et.tostring(树)
您可以尝试以下方法:

root.xpath("//scenario/init/send_channel/command[@name='CER']/avp[@name='Host-IP-Address']/value/text()")
另外,请注意,在您的示例中,您使用的是
text()
方法,但这不是您想要的:元素的“文本”是元素所包含的内容。例如,鉴于此:

r = etree.fromstring('...')

element = r.find('//avp[@name="Host-IP-Address"]')

# Access value
print 'Current value is:', element.get('value')

# change value
element.set('value', 'newvalue')
这是文本

元素上的
text()
方法的值为“this is The text”。

r.find('//avp[@name=“Host IP Address”]')返回语法错误:无法在元素上使用绝对路径。正确的方法应该是attrib(),对吗?事实证明etree.fromstring()实际上返回的不是etree.parse(),这是意外的。您可以使用
//avp[@name=“Host IP Address”]
将路径转换为相对路径,这样就可以了。“.”表示“当前节点”。谢谢Acorn。我可以通过这种方式完美地访问属性,但是如何设置这个新的host_ip值并将结果元素写回.xml文件呢?我正在更改上面代码段中的属性,只需使用普通的字典表示法。在您更改了要更改的属性之后,只需执行
et.tostring(tree)
.Acorn,恐怕我没有跟上您。我最初的问题其实是改变这些属性,而不仅仅是找到它们。我已经设置了host_ip.set('value','foobar'),但是缺少了什么,以便传播更改,这样我就可以使用open(“out.xml”,“w”)作为ofile:ofile.write(et.tostring(tree))?通过更改树的属性,无需其他操作。@Acorn.attrib不能处理诸如“draw:image:”之类的属性。知道如何添加这些属性吗?
r = etree.fromstring('...')

element = r.find('//avp[@name="Host-IP-Address"]')

# Access value
print 'Current value is:', element.get('value')

# change value
element.set('value', 'newvalue')
<someelement>this is the text</someelement>