1

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)

しかし、それはうまくいかないようです!いつものように、助けていただければ幸いです

EDIT:要求されたように、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>
4

1 に答える 1

3

XPath式の引用符を忘れました:

>>> '//phylo:name[text()='+line[0]+']'
'//phylo:name[text()=something]'

代わりにこれを行います:

>>> '//phylo:name[text()="%s"]' % line[0]
'//phylo:name[text()="something"]'
于 2012-08-14T23:56:42.533 に答える