У меня есть файл xml-tei:
#in R
doc <- xmlTreeParse("FILE_NAME" , useInternalNodes=TRUE, encoding="UTF-8")
ns = c(ns = "http://www.tei-c.org/ns/1.0")
namespaces = ns
getNodeSet(doc,"//* and //@*", ns)
doc
Я смотрю на два элемента внутри моего xml-tei: <l>
и <w>
, а также атрибуты (1) для <l>
, @xml:id
и (2) для <w>
type="verb"
и ana="#confrontation #action #ANT"
:
#example of element <l> and its child <w> in XML-TEI FILE
<l n="5b-6a" xml:id="ktu1.3_ii_5b-6a">
<w>[...]</w>
<w type="verb" ana="#MḪṢ01 #confrontation #action #ANT" xml:id="ktu1-3_ii_l5b-6a_tmtḫṣ" lemmaRef="uga/verb.xml#mḫṣ">tmtḫṣ</w>
<g>.</g>
</l>
Я использую функцию getNodeSet
#in R
l_cont <- getNodeSet(doc, "//ns:l[(@xml:id)]", ns)
l_cont
Конечно, он показывает все элементы и атрибуты внутри <l>
. Но я хотел бы выбрать только соответствующие атрибуты и их значения, чтобы было что-то вроде этого:
#in R
xml:id="ktu1.3_ii_5b-6a"
type="verb" ana="#confrontation #action #ANT"
Следуя предложению другого сообщения Загрузить XML в Dataframe в R с атрибутами родительского узла, я сделал:
#in R
attrTest <- function(x) {
attrTest01 <- xmlGetAttr(x, "xml:id")
w <- xpathApply(x, 'w', function(w) {
ana <- xmlGetAttr(w, "ana")
if(is.null(w))
data.frame(attrTest01, ana)
})
do.call(rbind, w)
}
res <- xpathApply(doc, "//ns:l[(@xml:id)]", ns ,attrTest)
temp.df <- do.call(rbind, res)
Но это не работает... Я получаю ошибки:
> res <- xpathApply(doc, "//ns:l[(@xml:id)]", ns ,attrTest)
Error in get(as.character(FUN), mode = "function", envir = envir) :
objet 'http://www.tei-c.org/ns/1.0' de mode 'function' introuvable
> temp.df <- do.call(rbind, res)
Error in do.call(rbind, res) : objet 'res' introuvable
Есть ли у вас предложения? Заранее спасибо
#example of element <l> and its child <w> in xml-tei file
. - person Vanessa   schedule 13.03.2017