提问人:LM10 提问时间:2/3/2023 更新时间:2/3/2023 访问量:51
如何根据特定的标签操作xml?
How to manipulate xml based on the specific tags?
问:
有一个 XML 是这样的
<OUTER>
<TYPE>FIRST</TYPE>
<FIELD1>1</FIELD1>
<ID>55056</ID>
<TASK>
<FILE>
<OPTIONS>1</OPTIONS>
</FILE>
</TASK>
</OUTER>
<OUTER>
<TYPE>SECOND</TYPE>
<FIELD1>2</FIELD1>
<ID>58640</ID>
<TASK>
<FILE>
<OPTIONS>1</OPTIONS>
</FILE>
</TASK>
</OUTER>
标记 ID 中的文本需要更新为新值,该值存在于此变量NEW_ID1中。比较应该发生在类型标签上,即只有当文本==FIRST时,我们才需要将ID替换为新的ID,并在type = SECOND时将其写回XML,用NEW_ID2更新ID等等,如何做到这一点?我尝试了以下方法,
tree = ET.parse("sample.xml")
root = tree.getroot()
det = tree.findall(".//OUTER[TYPE='FIRST']")
.
.
ID = NEW_ID1
tree.write("sample.xml")
但无法进一步操纵它
答:
1赞
Alexander
2/3/2023
#1
你很接近,除了不是一个属性,它是一个标签/元素,所以不会起作用。TYPE
[TYPE='FIRST']
相反,您可以做的是遍历所有标签/元素,并测试它们是否包含以值为文本值的值。然后,您可以获取标签 decendant,并更改其文本值。OUTER
TYPE
"FIRST"
OUTER
ID
例如:
tree = ET.parse("sample.xml")
root = tree.getroot()
for outer in tree.findall(".//OUTER"):
elem = outer.find(".//FIRST")
if elem.text == "FIRST":
id_elem = outer.find(".//ID")
id_elem.text = "NEWID1"
tree.write("sample.xml")
注意:我假设您的xml文件不仅包含您问题中的标记。xml 文件中应只有一个根元素。
评论
0赞
LM10
2/3/2023
输出结果是这样的<TYPE ID = “NEW_ID1” >FIRST</TYPE>而不是更新 <ID>tag,你能告诉我如何纠正这个问题吗?
0赞
Alexander
2/3/2023
哦。。。对不起,我误解了你的问题。我会更新
0赞
Michael Kay
2/3/2023
实际上不是一个标签。它是一个带有开始标记和结束标记的元素。使用不正确的术语会使人们很难理解文档和错误消息。TYPE
0赞
Alexander
2/3/2023
我认为两者都是......但如果它能让你开心,我会更新它@MichaelKay
评论