如何读取XML输入文件,操作一些节点(删除并重命名一些)并将输出写入新的XML输出文件?

use*_*rJT 4 xml r

我需要从互联网上读取一个XML文件并重新塑造它.这是我迄今为止的XML文件和代码.

library(XML)
url='http://ClinicalTrials.gov/show/NCT00001400?displayxml=true'  
doc = xmlParse(url,useInternalNode=TRUE)
Run Code Online (Sandbox Code Playgroud)

我能够使用XML包中的一些函数(例如,getNodeSet),但我不是专家,并且在互联网上有一些例子,但我自己无法解决这个问题.我也知道一些XPath,但这是4年前,我不是一个关于sapply和类似功能的专家.

但我的目标是:

  1. 我需要删除一整套关于位置的XML子分支,例如:<location> ... anything </location>.可以有多个具有位置数据的节点.我根本不需要输出中的细节.上面的XML文件始终符合XSD架构.调用根节点<clinical_study>.

  2. 生成的简化文件应写入名为"data-changed.xml"的新XML文件中.

  3. 我还需要重命名并从旧的嵌套位置移动一个分支

    <eligibility> <criteria> <textblock> Inclusion criteria are xyz </textblock/>...

  4. 在新输出("data-changed.xml")中,结构应该表示不同的XML节点并且直接位于根节点下:

    <eligibility_criteria> Inclusion criteria are xyz </eligibility_criteria>

所以我需要:

  • 将XML读入内存
  • 操纵树(在某处修剪)
  • 将一些XML节点移动到一个新的位置并以新的名称和
  • 编写生成的XML输出文件.

任何想法都非常感谢?

另外,如果您了解一个关于R内部XML解析的好(最近的!)教程(或者解决它的书籍章节,请分享参考).(我读过Duncan的小插曲,这些太过于先进(太简洁)).

小智 5

删除所有位置节点的代码:

r <- xmlRoot(doc)
removeNodes(r[names(r) == "location"])
Run Code Online (Sandbox Code Playgroud)