我有这个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次。有什么想做的更好吗?
答案 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")