当前位置: 首页 > 面试题库 >

python lxml-修改属性

范瀚昂
2023-03-14
问题内容
from lxml import objectify, etree

root = etree.fromstring('''<?xml version="1.0" encoding="ISO-8859-1" ?>
<scenario>
<init>
    <send channel="channel-Gy">
        <command name="CER">
            <avp name="Origin-Host" value="router1dev"></avp>
            <avp name="Origin-Realm" value="realm.dev"></avp>
            <avp name="Host-IP-Address" value="0x00010a248921"></avp>
            <avp name="Vendor-Id" value="11"></avp>
            <avp name="Product-Name" value="HP Ro Interface"></avp>
            <avp name="Origin-State-Id" value="1094807040"></avp>
            <avp name="Supported-Vendor-Id" value="10415"></avp>
            <avp name="Auth-Application-Id" value="4"></avp>
            <avp name="Acct-Application-Id" value="0"></avp>
            <avp name="Vendor-Specific-Application-Id">
                <avp name="Vendor-Id" value="11"></avp>
                <avp name="Auth-Application-Id" value="4"></avp>
                <avp name="Acct-Application-Id" value="0"></avp>
            </avp>
            <avp name="Firmware-Revision" value="1"> </avp>
        </command>
    </send>
</init>

<traffic>
    <send channel="channel-Gy" >
        <action>
            <inc-counter name="HbH-counter"></inc-counter>
            ....
        </action>
    </send>
</traffic>
</scenario>''')

如何修改/设置两个值?

  • 主机IP地址 value =“ 0x00010a248921”

  • “供应商ID” 值=“ 11”

我尝试访问失败,

root.xpath("//scenario/init/send_channel/command[@name='CER']/avp[@name='Host-IP-Address']/value/text()")

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

文件小于100kB,因此速度/ RAM无关紧要。


问题答案:
import lxml.etree as et

tree = et.fromstring('''
... your xml ...
''')

for host_ip in tree.xpath("/scenario/init/send/command[@name='CER']/avp[@name='Host-IP-Address']"):
    host_ip.attrib['value'] = 'foo'

print et.tostring(tree)


 类似资料:
  • 修改属性(命令)是用于修改或更新特定类的属性的命令。修改属性意味着修改表格的字段。 在本章中,将学习如何更新属性。 以下语句是命令的基本语法。 以下是有关上述语法中选项的详细信息。 - 定义属性所属的类。 - 定义您想要更新的属性。 - 定义要更新的属性的属性。 - 定义您想要在属性上设置的值。 下表定义了用于更改属性的属性列表。 属性 类型 描述 LINKEDCLASS 字符串 定义链接的类名称

  • 除了在构造函数中指定材质,在网格被创建后,也能对材质进行修改: 例5.2.1 var material = new THREE.MeshLambertMaterial({ color: 0xffff00 }); var geometry = new THREE.CubeGeometry(1, 2, 3); var mesh = new THREE.Mesh(geometry, materi

  • 1、从内部增加和修改类属性 来,我们先来温习一下类的结构。 看着这个结构,提一个问题,如何修改类属性,也就是类里面的变量? 从类结构来看,我们可以猜测,从类方法来修改,也就是从类内部来修改和增加类属性。 看下具体的实例: 这里还是强调一下,例子还是要自己多写,不要只看,自己运行, 看效果。多想。 2、从外部增加和修改类属性 我们刚刚看了通过类方法来修改类的属性,这时我们看下从外部如何修改和增加类属

  • 问题内容: 我知道这个问题已经被问过几次了,但是他们都没有真正的解决方法。对于我的具体情况,也许有一个。 我正在构建一个映射器类,该映射器类使用magic方法来延迟加载其他对象。看起来像这样: 在我的代码中,我这样做: 到目前为止,该方法有效。该对象没有名为“ role”的属性,因此它使用magic 方法创建该对象,并从“ role”对象返回其属性。 但是当我尝试修改’rolename’时: 然后

  • 数据表格里,选取单元格,双击可打开编辑状态,输入内容后,按Enter键保存

  • 问题内容: 我来自Java,试图弄清楚Go的类型系统是如何工作的。我想创建一个简单的图形数据结构并实现广度优先搜索。到目前为止,这就是我所拥有的。 当我尝试使用测试代码运行它时: 在我的String()方法中,len(node.neighbors)始终为0。我在做什么错?我以为,因为我在addEdge中采用了引用类型,所以它修改了节点引用,但显然我缺少有关Go的类型系统的信息。 问题答案: 这不是