#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. Идеально! Большое спасибо