SPLUS XML操作
在SPLUS中,用于处理XML的有2个库,Insightful公司的SPXML库和比尔实验室的XML库
SPXML库支持读写XML,并使用C代码写和分析XML标记,在SPLUS中,没有类似的XML对象,也不能处理XML,在这个库中,XML处理是用XSL完成的
XML库,它引入了一组SPLUS类,用XML对象呈现,如XMLNode和XMLComment,使用DOM以建立SPLUS对象,这些对象可以方便的在SPLUS中使用
具体使用哪个库,要看你的实际应用:
SPXML库是有效率的,它使用SAX分析器且大部分操作用C实现
SPXML库使用XSL来完成XML变换操作
XML库使用内建的SPLUS对象来完成XML的变换,SPLUS程序员可能更喜欢这种操作,胜于XSL
SPXML库使用
利用SPXML库,你可以使用createXMLFile把SPLUS对象当做XML文件保存起来,通过parseXMLFile读一个XML文件,利用XSLT或者XSL-FO来完成XML文件的变换
SPXML库函数提供了一些有用的工具函数,如下:
函数xml2html, xml2pdf, xml2ps, xml2rtf, xml2xml,其利用javaXMLTransform来完成XML到不同文件类型的转换
createXMLString函数返回一个XML串胜于写到一个文件中去
summaryReport函数实现了汇总报表
利用SPXML库读写XML
> library(SPXML) #加载SPXML库
> xmlFile <- "output.xml" #指定输出路径
> orig.list <- list(fuel.frame, c(1:50), hist) #加载数据集内容到LIST
> createXMLFile(orig.list, xmlFile) #通过LIST建立XML文件
> new.list <- parseXMLFile(xmlFile) #读XML文件到LIST
> all.equal(orig.list, new.list) #比较新旧2个LIST是否相等
利用XSL来实现XML变换
> library(SPXML)
> logRegPMMLFile <- paste(getenv("SHOME"), "/library/SPXML/examples/xml_generation/logRegPMML.xml", sep="") #指定XML文件
> logRegXSLFile <- paste(getenv("SHOME"),"/library/SPXML/examples/xml_generation/logReg_ColImp_Vec.xsl", sep="") #知道XSL文件
> splusVecXMLFile <- "Splus_ColImp_Vec.xml" #知道目标XML文件
> xml2xml(logRegPMMLFile, splusVecXMLFile, logRegXSLFile)
> colImpVec <- parseXMLFile(splusVecXMLFile) #读目标XML文件
> colImpVec
建立XML报表
> library(SPXML)
> xsltFile <- paste(getenv("SHOME"),"/library/SPXML/xml/SplusObjects.xsl", sep="")
> xmlFile <- "c:\\temp.xml"
> splusObject <- fuel.frame
> createXMLFile(splusObject, xmlFile)
> javaXMLTransform(xmlFile, "c:\\fuelReport.htm", xsltFile)
要建立PDF,RTF或者PS,需使用SplusObjects_FO.xsl
> foFile <- paste(getenv("SHOME"), "/library/SPXML/xml/SplusObjects_FO.xsl", sep="")
> javaXMLTransform(xmlFile, "c:\\fuelReport.pdf", foFile)
> javaXMLTransform(xmlFile, "c:\\fuelReport.rtf", foFile)
> javaXMLTransform(xmlFile, "c:\\fuelReport.ps", foFile)
汇总报告
使用summaryReport函数
> args(summaryReport)
如:
> reportFilename <- "fuel.report.html"
> summaryReport(fuel.frame, reportFilename)
也可以使用下面代码:
> summaryReport(data=fuel.frame, file="c:\\fuel.report.pdf", variables=c("Weight"), grouping.variables=c("Type"))
自定义报表输出
如果你想改变报表输出,比如改变颜色、字体等,你可以通过修改ColumnReport.xsl(用于HTML)或者ColumnReport_FO.xsl来实现,他们位于library/SPXML/xml目录下
改变颜色
<xsl:variable name="g_headerBG" select="'#CCE6FF'" />
<xsl:variable name="g_rowBG_1" select="'#EEEEEE'" />
<xsl:variable name="g_rowBG_2" select="'#FFFFFF'" />
对应在XSL中的特殊字符
小于< <
大于> >
等于= =