考虑使用前面提到的库,通过 DOM 方法构建 XML,例如XML
无需连接或插入字符串:
library(XML)
# DATA
df <- data.frame(refNo = c(1, 2),
uri = c('S1A_IW_GRDH_1SDV_20190818T175529_20190818T175554_028627_033D25_22ED.zip',
'S2A_MSIL1C_20190823T061631_N0208_R034_T42TXS_20190823T081730.zip'),
plugin = c('class org.esa.s1tbx.io.sentinel1.Sentinel1ProductReaderPlugIn',
'class org.esa.s2tbx.dataio.s2.ortho.plugins.Sentinel2L1CProduct_Multi_UTM42N_ReaderPlugIn')
)
# CREATE XML FILE
doc = newXMLDoc()
root = newXMLNode("session", doc = doc)
# WRITE XML NODES AND DATA
mvNode = newXMLNode("modelVersion", "1.0.0", parent = root)
for (i in 1:nrow(df)){
prodNode = newXMLNode("products", parent = root)
# APPEND TO PRODUCT NODE
newXMLNode("refNo", df$refNo[i], parent = prodNode)
newXMLNode("uri", df$uri[i], parent = prodNode)
newXMLNode("productReaderPlugin", df$plugin[i], parent = prodNode)
}
vwNode = newXMLNode("views", parent = root)
# OUTPUT XML CONTENT TO CONSOLE
print(doc)
# OUTPUT XML CONTENT TO FILE
saveXML(doc, file="Output.xml")
Output
<?xml version="1.0"?>
<session>
<modelVersion>1.0.0</modelVersion>
<products>
<refNo>1</refNo>
<uri>S1A_IW_GRDH_1SDV_20190818T175529_20190818T175554_028627_033D25_22ED.zip</uri>
<productReaderPlugin>class org.esa.s1tbx.io.sentinel1.Sentinel1ProductReaderPlugIn</productReaderPlugin>
</products>
<products>
<refNo>2</refNo>
<uri>S2A_MSIL1C_20190823T061631_N0208_R034_T42TXS_20190823T081730.zip</uri>
<productReaderPlugin>class org.esa.s2tbx.dataio.s2.ortho.plugins.Sentinel2L1CProduct_Multi_UTM42N_ReaderPlugIn</productReaderPlugin>
</products>
<views/>
</session>