我正在使用CRAN xml2包来解析HMDB database中的XML文件。 我遇到一个问题,我想执行以下操作:
当同级节点(在同一级别)具有给定值时选择一个节点 值。
在下面的MWE中,当节点 term 包含文本时,我想选择节点 定义 例如“生理学” 。那有可能吗?
请参阅下面的MWE,其输入来自this XML file:
lev1 <- read_xml("<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<metabolite>
<accession>HMDB0000001</accession>
<name>1-Methylhistidine</name>
<ontology>
<root>
<term>Physiology</term>
<definition>A</definition>
</root>
<root>
<term>Disposition</term>
<definition>B</definition>
</root>
<root>
<term>Process</term>
<definition>C</definition>
</root>
<root>
<term>Role</term>
<definition>D</definition>
</root>
</ontology>
</metabolite>")
lev2 <- xml_children(lev1)
acc <- xml_text(xml_find_all(lev2, "/metabolite/accession"))
nam <- xml_text(xml_find_all(lev2, "/metabolite/name"))
##DO SOMETHING LIKE THIS (THE FOLLOWING DOES NOT WORK)
phys <- xml_text(xml_find_all(lev2, "/metabolite/ontology/root/definition"
[which("/metabolite/ontology/root/term[text()='Physiology']")]))
最终,我想得到一个这样的数据框:
> mydf
Accession Name Physiology Disposition Process Role
1 HMDB0000001 1-Methylhistidine A B C D