我有一堆envelope
元素的 XML。每个内部都是一个数组。数组中的每一行都有 2 个元素。第一个是标识符,第二个是我要抓取的文本。我需要行的第一个值来识别正确的行,以便我可以获取正确的值。
在下面的示例中,我在用代码表示的行中有“食物” 610954
。我想抓住这段代码之后的 2 个元素(c('pizza', 'burger')
。同样有代码表示的“饮料” 605380
。我想抓住c('coke', 'pepsi')
。我怎样才能使用xml2包来做到这一点?
library(xml2)
library(magrittr)
myxml <- read_xml('
<inside>
<envelope>
<card-entries type="array">
<card-entry>
<card-id type="integer">605380</card-id>
<value>coke</value>
</card-entry>
<card-entry>
<card-id type="integer">610954</card-id>
<value>pizza</value>
</card-entry>
</card-entries>
</envelope>
<envelope>
<card-entries type="array">
<card-entry>
<card-id type="integer">605380</card-id>
<value>pepsi</value>
</card-entry>
<card-entry>
<card-id type="integer">610954</card-id>
<value>burger</value>
</card-entry>
</card-entries>
</envelope>
</inside>
'
)
## as far as I can parse it (but not specific enough)
myxml %>%
xml_find_all('//envelope/card-entries[@type="array"]/card-entry') %>%
xml_text()
food <- -CODE THAT GIVES HERE c('pizza', 'burger')- # 610954
drinks <- -CODE THAT GIVES HERE c('coke', 'pepsi')- # 605380