gpt4 book ai didi

python - 使用 Python 更改 .xml 中的特定重复元素

转载 作者:行者123 更新时间:2023-11-30 23:41:57 25 4
gpt4 key购买 nike

我有以下我喜欢操作的 .xml 文件:

<html>
<A>
<B>
<C>
<D>
<TYPE>
<NUMBER>7297</NUMBER>
<DATA />
</TYPE>
<TYPE>
<NUMBER>7721</NUMBER>
<DATA>A=1,B=2,C=3,</DATA>
</TYPE>
</D>
</C>
</B>
</A>
</html>

我想更改<DATA>内的文本位于<NUMBER>7721</NUMBER>下元素。我怎么做?如果我使用 find()findtext()它只能指向第一个匹配项。

最佳答案

XPath 非常适合此类内容。 //TYPE[NUMBER='7721' and DATA] 将查找至少有一个 NUMBER 个子节点(文本为“7721”)和至少一个 DATA 子节点的所有 TYPE 节点:

from lxml import etree

xmlstr = """<html>
<A>
<B>
<C>
<D>
<TYPE>
<NUMBER>7297</NUMBER>
<DATA />
</TYPE>
<TYPE>
<NUMBER>7721</NUMBER>
<DATA>A=1,B=2,C=3,</DATA>
</TYPE>
</D>
</C>
</B>
</A>
</html>"""

html_element = etree.fromstring(xmlstr)

# find all the TYPE nodes that have NUMBER=7721 and DATA nodes
type_nodes = html_element.xpath("//TYPE[NUMBER='7721' and DATA]")

# the for loop is probably superfluous, but who knows, there might be more than one!
for t in type_nodes:
d = t.find('DATA')
# example: append spamandeggs to the end of the data text
if d.text is None:
d.text = 'spamandeggs'
else:
d.text += 'spamandeggs'
print etree.tostring(html_element)

输出:

<html>
<A>
<B>
<C>
<D>
<TYPE>
<NUMBER>7297</NUMBER>
<DATA/>
</TYPE>
<TYPE>
<NUMBER>7721</NUMBER>
<DATA>A=1,B=2,C=3,spamandeggs</DATA>
</TYPE>
</D>
</C>
</B>
</A>
</html>

关于python - 使用 Python 更改 .xml 中的特定重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11676649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com