在python中:将xpath与列表中的元素一起使用

在python中:将xpath与列表中的元素一起使用,python,xml,xpath,phylogeny,Python,Xml,Xpath,Phylogeny,在Stackoverflow的几个人的帮助下,我想出了以下代码: import lxml.etree f = open("PaVE.tre.xml", "r") out = open("PaVE.2.xml", "a") data = f.read() line=["HPV16","Alpha"] tree = lxml.etree.XML(data) nsmap = {'phylo': 'http://www.phyloxml.org'} matches = tree.xpath('//p

在Stackoverflow的几个人的帮助下,我想出了以下代码:

import lxml.etree

f = open("PaVE.tre.xml", "r")
out = open("PaVE.2.xml", "a")
data = f.read()
line=["HPV16","Alpha"]

tree = lxml.etree.XML(data)
nsmap = {'phylo': 'http://www.phyloxml.org'}
matches = tree.xpath('//phylo:name[text()="HPV16"]', namespaces=nsmap)

for e in matches:
    #do something fun
但是,我正在将HPV16硬编码到xpath表达式中。我想从第[0]行获取HPV16。我的想法是:

matches = tree.xpath('//phylo:name[text()='+line[0]+']', namespaces=nsmap)
然而,这似乎不起作用! 如往常一样,任何帮助都将不胜感激

编辑: 我根据请求从xml文件中添加了几行:

<phyloxml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.phyloxml.org" xsi:schemaLocation="http://www.phyloxml.org http://www.phyloxml.org/1.10/phyloxml.xsd">
<phylogeny rooted="true">
  <clade>
    <clade>
      <branch_length>0.5</branch_length>
      <clade>
        <name>HPV16</name>
        <branch_length>1.0</branch_length>
      </clade>
      <clade>

0.5
HPV16
1

您忘记了XPath表达式中的引号:

>>> '//phylo:name[text()='+line[0]+']'
'//phylo:name[text()=something]'
我会这样做:

>>> '//phylo:name[text()="%s"]' % line[0]
'//phylo:name[text()="something"]'

我们可以得到一个XML示例吗?您缺少
行[0]
周围的双引号<代码>文本()=“'+行[0]+'”]“这似乎不起作用”-发生了什么?例外?输出错误?等等。还有,
行[0]
的内容是什么?(还有,你忘了它周围的双引号了吗?)你能在谓词中调用
text()
?我以为它是一个节点,就像其他标签一样。可能是我记错了,我已经有一段时间没有使用xpath了。谢谢大家,我觉得自己太蠢了!我应该看看那些话!