Применить функцию к XmlNodeList в R (не весь XML-файл)

#xml #r #xpath #xml-parsing

#xml #r #xpath #xml-синтаксический анализ

Вопрос:

Я пытаюсь проанализировать информацию из XML-файлов, используя R. Каждый файл может содержать записи модели, и я хочу получить список объектов, представляющих эти записи.

Используя этот файл в качестве примера, я пытаюсь применить функцию для представления узлов под каждым PubmedArticle . Когда я пытаюсь сделать это, используя xpathApply из XML библиотеки, каждая запись содержит информацию из каждой статьи pubmed в файле (вместо того, чтобы применять функцию только к тем узлам, которые заданы PubmedArticle ). Минимальный пример для иллюстрации:

 library(XML)
library(RCurl)

raw_record <- getURI("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?amp;db=pubmedamp;id=20203609,11959827,19409887amp;rettype=xml")
parsed <- xmlTreeParse(raw_record, useInternalNodes=TRUE)

get_title <- function(node) xpathApply(node, "//ArticleTitle", xmlValue)
xpathApply(parsed, "/PubmedArticleSet/PubmedArticle", get_title)
#[[1]]
#[[1]][[1]]
#[1] "Changes in Hox genes' structure and function during the evolution of the squamate body plan."
#
#[[1]][[2]]
#[1] "Cdx1 and Cdx2 have overlapping functions in anteroposterior patterning and     
# posterior axis elongation."
#
#[[1]][[3]]
#[1] "Axial patterning in snakes and caecilians: evidence for an alternative         interpretation of the Hox code."
#
#
#[[2]]
#[[2]][[1]]
#[1] "Changes in Hox genes' structure and function during the evolution of the squamate     body plan."
#
#[[2]][[2]]
#[1] "Cdx1 and Cdx2 have overlapping functions in anteroposterior patterning and posterior axis elongation."
#[SNIP]
  

Каков правильный способ извлечения информации только из каждого из узлов, созданных xpathApply or getNodeSet ?

Комментарии:

1. @MrFlick — извините, это из RCurl . добавил это в пример сейчас

Ответ №1:

Вы просто хотите использовать относительный путь в get_title функции Try

 get_title <- function(node) xpathApply(node, ".//ArticleTitle", xmlValue)
titles<-xpathApply(parsed, "/PubmedArticleSet/PubmedArticle", get_title)
unlist(titles)
  

Это .// означает, что он начнет искать где-нибудь ниже текущего узла. Это даст вам

 [1] "Changes in Hox genes' structure and function during the evolution of the squamate body plan."          
[2] "Cdx1 and Cdx2 have overlapping functions in anteroposterior patterning and posterior axis elongation." 
[3] "Axial patterning in snakes and caecilians: evidence for an alternative interpretation of the Hox code."
  

Комментарии:

1. Идеально! Большое спасибо