没有第一行解析XML到data.frame的最佳方法?

时间:2018-04-19 19:31:51

标签: r

我有这个xml:

xml <- "
<fixrate_table typ=\"A\">
<table_number>1/A/ABC/2008</table_number>
<date_publication>2008-01-02</date_publication>
<position>
  <currency_name>bat (Tailand)</currency_name>
  <conveter>1</conveter>
  <code>THB</code>
  <average_rate>0,0731</average_rate>
</position>
<position>
  <currency_name>dolar amer</currency_name>
  <conveter>1</conveter>
  <code>USD</code>
  <average_rate>2,4550</average_rate>
</position>
<position>
  <currency_name>dolar au</currency_name>
  <conveter>1</conveter>
  <code>AUD</code>
  <average_rate>2,1629</average_rate>
</position>
</fixrate_table>
"

我希望:
1:得到&#34; date_publication&#34;
2:将其转换为data.frame,其中列定义为: colnames(df)&lt; - c(&#34; currency_name&#34;,&#34; conveter&#34;,&#34; code&#34;,&#34; average_rate&#34;)

library(XML)
date_publication <- xmlToList(xmlParse(xml))$date_publication
df <- xmlToDataFrame(xml)
df <- df[-c(1,2), -1]

在这个解决方案中,我将整个xml解析2次。有什么想做的更好吗?

1 个答案:

答案 0 :(得分:0)

对于大量节点,这可能效果最好。虽然你可以使用正则表达式,但不确定哪个更好。

library(qdapRegex)
date_publication <- rm_between(xml, 'date_publication>', '</date_publication', extract=TRUE)[[1]]

我最初会建议xml2::xml_find_all,但这种情况需要解析它两次。

library(xml2)
xmlrd <- read_xml(xml)
xmlnode <- xml2::xml_find_all(xmlrd, "//date_publication")