繁体   English   中英

如何在此 XML 文档中找到元素?

[英]How do I find the element in this XML document?

我试图在 python 的 XML 文档中的几个元素中找到文本。 这是 XML 文档的片段,后面是我的代码:

<root>
   <doc>
      <field name="id">metadata_9606_SAMN03465421</field>
      <field name="is_metadata">true</field>
      <field name="is_sample">true</field>
      <field name="project_desc">PRJNA280600</field>
      <field name="taxid">9606</field>
      <field name="source_name">uterus</field>
      <field name="sample_id">SAMN03465421</field>
      <field name="exp_Mcount">13341.1</field>
   </doc>
   <doc>
      <field name="id">1_SAMN03465421</field>
      <field name="gene">1</field>
      <field name="sample_id">SAMN03465421</field>
<field name="source_name">uterus</field><field name="var">0</field>
      <field name="full_rpkm">0.133911</field>
      <field name="exp_rpkm">0.134</field>
      <field name="exp_total">3155</field>
      <field name="project_desc">PRJNA280600</field>
   </doc>
   <doc>
      <field name="id">1_SAMN03465420</field>
      <field name="gene">1</field>
      <field name="sample_id">SAMN03465420</field>
<field name="source_name">trachea</field><field name="var">0</field>
      <field name="full_rpkm">0.0232912</field>
      <field name="exp_rpkm">0.0233</field>
      <field name="exp_total">604</field>
      <field name="project_desc">PRJNA280600</field>
   </doc>
</root>

这是我的代码:

import lxml.etree
tree = lxml.etree.parse(<PATH TO DOCUMENT>)
root = tree.getroot()
print(root.findall('/doc/field name[4]'))

我想在每个包含 XPATH 的“doc”元素中打印第四个“字段名称”,我正在寻找名称为“source_name”的每个元素的第四个字段文本。 但是,当我运行此代码时出现此错误:

Traceback (most recent call last):
  File "/home/alex/PycharmProjects/gene_expression_ftp/main.py", line 4, in <module>
    print(root.findall('/doc/field name[4]'))
  File "src/lxml/etree.pyx", line 1575, in lxml.etree._Element.findall
  File "src/lxml/_elementpath.py", line 334, in lxml._elementpath.findall
  File "src/lxml/_elementpath.py", line 312, in lxml._elementpath.iterfind
  File "src/lxml/_elementpath.py", line 281, in lxml._elementpath._build_path_iterator
SyntaxError: cannot use absolute path on element

尝试这个

def search():
    import xml.etree.ElementTree as ET

    tree = ET.parse('file.xml')

    root = tree.getroot()
   
    for doc in root.findall("doc"):
       for item in doc:
           print(item.attrib['name'])

我找到了一个使用名为 xmltodict 的有趣库的解决方案: Finding element in xml with python 这些是文档: https ://xmltodict.readthedocs.io/en/stable/README/。

这是我的代码:

with open(<PATH TO FILE>, 'r') as gene_exps:
    data = xmltodict.parse(gene_exps.read())

for i in data['root']['doc']:
    for item in i.get('field'):
        if item.get('@name') == 'source_name':
            print(item.get('#text'))

如果您想要每个文档的第四个字段,那就是/root/doc/field[4]

如果您想要名为“source_name”的字段,那就是/root/doc/field[@name='source_name"]

如果您想要一个字段,它既是第四个字段,又具有名称“源名称”,即/root/doc/field[4][@name='source_name"]

但是您还没有明确说明您正在寻找哪些。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM