![](/img/trans.png)
[英]How do I remove a comment outside of the root element of an XML document using python lxml
[英]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.