Как сделать так, чтобы xpathSApply выводил вектор длины узлов, используя xmlValue? - PullRequest
3 голосов
/ 07 ноября 2011

Допустим, у меня есть следующее:

library(XML)    

my.xml <- '
<tv>
  <show>
    <name>Star Trek TNG</name>
    <rating>1.0</rating>
  </show>
  <show>
    <name>Doctor Who</name>
  </show>
  <show>
    <name>Babylon 5</name>
    <rating>2.0</rating>
  </show>
</tv>
'

doc <- xmlParse(my.xml)
xpathSApply(doc, "/tv/show/rating", xmlValue)

# [1] "1.0" "2.0"

Есть три узла 'show'.Как я могу вместо этого сделать вывод:

# [1] "1.0" NULL "2.0"

, чтобы учесть доктора Кто, у которого нет рейтинга в xml, но длина все еще равна 3?

1 Ответ

5 голосов
/ 07 ноября 2011

Если вы указали путь до «рейтинга», список узлов уже будет иметь только 2 элемента, с которых нужно начинать.Поэтому, когда вы применяете xmlValue() к этому списку узлов, выходные данные также будут иметь только 2 элемента.Вы можете обойти это, просто начав с одного уровня вверх по дереву:

> xpathSApply(doc, '/tv/show', function(x) xmlValue(xmlChildren(x)$rating))
[1] "1.0" NA    "2.0"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...