Ответ 1
Здесь некоторые отзывы после использования пакета XML.
-
xmlParse
- это версияxmlTreeParse
которой аргументuseInternalNodes
имеет значение TRUE. - Если вы хотите получить объект R, используйте
xmlTreeParse
. Это может быть не очень эффективным и ненужным, если вы хотите просто извлечь частичную часть XML-документа. - Если вы не хотите получать объект R, просто указатель переменного тока, используйте
xmlParse
. Но вы должны знать некоторые основыxpath
чтобы манипулировать результатом. - Используйте
asText=TRUE
если у вас есть текст, а не файл или URL в качестве ввода.
Вот пример, где я показываю разницу между двумя функциями:
txt <- "<doc>
<el> aa </el>
</doc>"
library(XML)
res <- xmlParse(txt,asText=TRUE)
res.tree <- xmlTreeParse(txt,asText=TRUE)
Сейчас осматриваем 2 объекта:
class(res)
[1] "XMLInternalDocument" "XMLAbstractDocument"
> class(res.tree)
[1] "XMLDocument" "XMLAbstractDocument"
Вы видите, что res является внутренним документом. Это указатель на объект C. res.tree является объектом R Вы можете получить его атрибуты так:
res.tree$doc$children
$doc
<doc>
<el>aa</el>
</doc>
Для res вы должны использовать действительный запрос xpath
и одну из этих функций (xpathApply
, xpathSApply
, getNodeSet
) для его проверки. например:
xpathApply(res,'//el')
После создания действительного узла xmlValue
вы можете применить xmlValue
, xmlGetAttr
,.. для извлечения информации об узле. Итак, вот эти 2 утверждения эквивалентны:
## we have already an R object, just apply xmlValue to the right child
xmlValue(res.tree$doc$children$doc)
## xpathSApply create an R object and pass it to
xpathSApply(res,'//el',xmlValue)