如何基于文本节点的值添加xml节点

2024-05-19 01:49:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我在玩找到的一个xml文件@http://www.jsphylosvg.com/examples/source.php?example=2&t=xml

如果节点的值name="Espresso",我想插入一个节点。在

例如,我想换成:

<clade>
<name>Espresso</name>
<branch_length>2.0</branch_length>
</clade>

收件人:

^{pr2}$

根据我到目前为止所做的研究,我可以使用xpath来找到包含espresso的节点(这应该行得通,但是不行吗?)

import re, sys
import lxml.etree
f = open("test.xml", "r")
data = f.read()
tree = lxml.etree.XML(data)
if tree.xpath('//name/text()="Espresso"'):
    insert new child here

此时,应该可以使用lxml.etree.Element创建xml节点,并使用insert将它们附加到xml文档中

然而,虽然这在理论上听起来很棒,但我无法让它发挥作用。
如有任何帮助/建议,我将不胜感激


Tags: 文件nameimportbranchtreedata节点xml
1条回答
网友
1楼 · 发布于 2024-05-19 01:49:25

您的XPath语句不完全正确。我想你想要的是:

>>> DOC = """<clade>
... <name>Espresso</name>
... <branch_length>2.0</branch_length>
... </clade>"""
>>> 
>>> import lxml.etree
>>> tree = lxml.etree.XML(DOC)
>>> matches = tree.xpath('//name[text()="Espresso"]')

然后在匹配项之后追加元素:

^{pr2}$

编辑:

由于您的文档有一个名称空间,所以您需要将名称空间映射传递给XPath函数,并在标记名前面加上名称空间前缀,如下所示:

>>> nsmap = {'phylo': 'http://www.phyloxml.org'}
>>> tree.xpath('//phylo:name[text()="Espresso"]', namespaces=nsmap)
[<Element {http://www.phyloxml.org}name at 0x2c875f0>]

相关问题 更多 >

    热门问题