2015-06-04 4 views
1

Я изучаю, как использовать R для разбора XML, и я пытаюсь использовать пакет Hackley Wickham's xml2 для анализа текстового документа TEI XML, расположенного here (предупреждение: это зашифрованный файл, конкретный, который я пытаюсь проанализировать, приведен в коде ниже). Я пытаюсь понять, как пространства имен работают в этом пакете (я не могу понять документацию для конкретного текста, который я использую). С XML пакет, я мог бы сделать следующее:Неопределенное пространство имен xml2 в R

library("XML") 
crisis <- xmlParse("data/Crisis130_22.2.tei.xml") 
all_divs <- getNodeSet(crisis, "//def:div", 
        namespaces=c(def = "http://www.tei-c.org/ns/1.0")) 

Я не могу понять, как сделать это с помощью xml2, однако. Я либо получаю ошибку inherits(x, "xml_document") is not TRUE, либо ошибку In node_find_all(x$node, x$doc, xpath = xpath, nsMap = ns) : Undefined namespace prefix [1219]. Это то, что я пробовал:

library("xml2") 

crisis2 <- read_xml("data/Crisis130_22.2.tei.xml") 

# check to see whether TEI URL is present 
xml_ns(crisis2) 

all_divs2 <- xml_find_all(crisis2, "//div", xml_ns(crisis2)) # gives empty list 

all_divs <- xml_find_all(crisis2, "/def:div", xml_ns(crisis2)) # undefined namespace error 

Я знаю, что это новый пакет, но кто-нибудь знает, как использовать пространство имен в нем?

ответ

3

Хорошо, я понял это сам, но я думал, что разместил его здесь вместо того, чтобы удалить вопрос.

library("xml2") 
crisis2 <- read_xml("data/Crisis130_22.2.tei.xml") 
all_divs <- xml_find_all(crisis2, "//d1:div", xml_ns(crisis2)) 

Оглядываясь назад, я думаю, ответ очевиден, но, как я уже сказал, я думал, что я выкладываю решение здесь в случае, если это помогает кто-то в будущем.