我试图从(非常大的)文档中提取某些xml值。因为我只对某些节点感兴趣,所以我创建了子集。
library(XML)
data.raw <- xmlParse(file="in/data.xml", encoding="UTF-8")
data.top <- xmlRoot(data.raw)
subset.wkr67 <- getNodeSet(doc=data.top, "//wahl[@jahr='13']/gebiet[@schluessel='67']/wvt")
最后一个对象看起来像这样(fyi,这些是对某些地区有绝对投票数的选举结果):
[[1]]
<wvt kurz="CDU" lang="Christlich Demokratische Union Deutschlands in Niedersachsen" button="CDU">
<ergebnis kurz="STWVT" lang="Zweitstimmen">
<stimmen>21478</stimmen>
<farbe>#0033CC</farbe>
<prozent>57.6</prozent>
</ergebnis>
<ergebnis kurz="STKAND" lang="Erststimmen">
<stimmen>25835</stimmen>
<farbe>#0033CC</farbe>
<prozent>69.4</prozent>
</ergebnis>
</wvt>
[[2]]
...
attr(,"class")
[1] "XMLNodeSet"
我想提取不同层级的绝对投票数;它们应该保存在单独的对象中。据我所知,这应该可以使用xmlValue和sapply。
为了提取&#34;刺激的价值&#34;元素是元素的兄弟元素&#34; ergebnis&#34;属性&#34; kurz&#34; =&#34; STWVT&#34; (在我的例子中:21478),我试图这样做:
sapply(subset.wkr67, xmlValue, '/wvt/ergebnis[@kurz="STWVT"]/stimmen')
[1] "21478#0033CC57.625835#0033CC69.4" "6640#FFDFDF17.86308#FFDFDF17.0" "4682#99990012.61410#FFFF993.8" "2663#CCFFCC7.11888#CCFFCC5.1"
[5] "708#C979E31.9848#B953EC2.3" "220.1" "3731.0" "830.2"
[9] "2140.6" "1520.4" "1220.3" "542#F5A5541.5541#F5A5541.5"
[13] "593#ECF0EC1.6373#ECF0EC1.0"
我以某种方式提取了太多的信息。 (每个元素基本上都是粘贴在一起的所有元素的值.13的长度是可以的并且适合数据。) (如果我进一步向R命令添加选项&#34; recursive = FALSE&#34;我的结果是一个长度相同的向量,只包含字符。)
如何只提取&#34;刺激的第一个值&#34;元件? (在我的情况下是21478)感谢您的帮助!
答案 0 :(得分:3)
假设您只在xml文件中显示了数据(带标题),请尝试以下操作:
library(XML)
doc = xmlParseDoc("wahl.xml")
xpathSApply(doc,"/wvt/ergebnis",xmlAttrs)
xpathSApply(doc,"/wvt/ergebnis/stimmen",xmlValue)
应该遵循一些转换到数据框来获取每个投票集的描述符。