如何在Python中引用标记之间的XML值
所以问题就在这里:如何在Python中引用标记之间的XML值,python,xml,Python,Xml,所以问题就在这里:val=str(vars.find('value')),因为当我运行此代码并print valPowerShell打印时: 0x0328BFC0处的元素“值” 对于所有值标记 首先,我认为您的外部循环(for child in root.iter())不是您想要的,因为它将遍历文档中的所有元素。这将导致您多次访问某些节点 其次,你看到 x = input("if find this value delete rule block ") str(x) for child in
val=str(vars.find('value'))
,因为当我运行此代码并print val
PowerShell打印时:
0x0328BFC0处的元素“值”
对于所有
值
标记 首先,我认为您的外部循环(for child in root.iter()
)不是您想要的,因为它将遍历文档中的所有元素。这将导致您多次访问某些节点
其次,你看到
x = input("if find this value delete rule block ")
str(x)
for child in root.iter():
for rule in child.findall('rule'):
for vars in rule.findall('vars'):
val = str(vars.find('value'))
print(val)
if val == x:
root.remove(rule)
tree.write('output.xml')
…因为您正在对vars.find('value')
的结果调用str
,
而find
方法返回的是元素,而不是字符串。如果你想要
元素的文本内容,请使用.text
属性。例如:
Element 'value' at 0x0328BFC0
最后,您只能在的父级上使用remove
方法
元素,因此调用root.remove()
永远不会成功
去上班
综合以上所有因素,我们得到如下结果:
if value.text == x:
...
我不得不对你的输入文档做一些假设,所以我进行了测试
它与以下数据进行对比:
from lxml import etree
doc = etree.parse('data.xml')
root = doc.getroot()
target = input('remove items with this value: ')
for rule in root.findall('rule'):
for vars in rule.findall('vars'):
for value in vars.findall('value'):
if value.text == target:
value.getparent().remove(value)
doc.write('output.xml')
*
地图
*
*
8795
4.
*
谢谢,一切正常,但您可以参考规则。我在同一个地方编写了这样的代码:rule.getparent().remove(rule)及其工作属性
from lxml import etree
doc = etree.parse('data.xml')
root = doc.getroot()
target = input('remove items with this value: ')
for rule in root.findall('rule'):
for vars in rule.findall('vars'):
for value in vars.findall('value'):
if value.text == target:
value.getparent().remove(value)
doc.write('output.xml')
<?xml version="1.0"?>
<document>
<rule>
<vars>
<value>*</value>
<value>MAP</value>
<value></value>
<value>*</value>
<value>*</value>
<value>8795</value>
<value>4</value>
<value>*</value>
</vars>
</rule>
</document>