【发布时间】:2016-01-26 16:31:13
【问题描述】:
我在下面有一些示例 XML 数据:
xml.sample <-'<?xml version="1.0" encoding="utf-8"?>
<Production>
<Item>
<ItemNr>1</ItemNr>
<Category>Processing</Category>
<Processed>
<Dia>325</Dia>
<Log>
<LogKey>1</LogKey>
</Log>
<Log>
<LogKey>2</LogKey>
</Log>
</Processed>
</Item>
<Item>
<ItemNr>2</ItemNr>
<Category>NoProcessing</Category>
<NotProcessed>
<Dia>72</Dia>
</NotProcessed>
</Item>
<Item>
<ItemNr>3</ItemNr>
<Category>Processing</Category>
<Processed>
<Dia>95</Dia>
<Dia>100</Dia>
<Log>
<LogKey>1</LogKey> %>%
</Log>
</Processed>
</Item>
</Production>'
我读入并尝试运行以下代码:
doc <- xmlTreeParse(xml.sample, useInternalNodes = T)
root <- xmlRoot(doc)
xpathSApply(root, "//Item/Processed/Dia", xmlValue)
它返回以下内容:
"325" "95" "100"
我想要的以下格式是,对于每个<Item> 节点,找到一个<Dia> 标记,将与该<Item> 节点相关的所有<Dia> 值存储到列表的一部分中。
理想情况下是这样的:
dia.list <- vector("list", 2)
[[1]]
[1] "325"
[[2]]
[1] "95" "100"
但是,问题在于 xpathSApply,它连接了所有满足给定 Xpath 的值,因此您无法区分哪些值来自哪个节点。
对此的任何帮助将不胜感激:)
【问题讨论】:
标签: xml r xpath xml-parsing