R xml2:当同级节点(在同一级别)具有给定值时,从节点获取文本

时间:2018-06-26 09:35:50

标签: r xml xml-parsing nodes

我正在使用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

0 个答案:

没有答案