在 R 中使用 XSLT 转换 XML
Convert XML using XSLT in R
我目前正在由 SQL Server Reporting Services 执行任务,它使用将典型模式转换为定制模式的 XSLT 将数据集导出为 XML 格式。为了替换这份报告,我需要能够在用户想要下载它时进行类似的转换XML。
XSLT 生成的最终布局很糟糕 - 它涉及填充和各种古怪的连接,我宁愿不通过在从数据到 XML 的第一次转换中进行整个转换来重新发明轮子。
我的 google-fu 让我失望了:如何使用 R 通过 XSLT 转换 XML?
MWE
这是一个使用 iris 数据并将其转换为 XML 的脚本(我使用 CRAN 的包纯粹是为了降低示例中的代码级别)。然后我有 an XSLT (on gist) 当我 运行 中的 XML 通过 Visual Studio 转换 XML 但我不知道如何翻译 activity 进入 R.
library(optiRum)
library(XML)
irisdata<-convertToXML(iris)
saveXML(irisdata,"iris.xml")
我认为您正在寻找 Sxslt
包,仅使用示例数据
library("Sxslt")
library("XML")
files <- sapply(c("sqrt.xml", "sqrt.xsl"), function(f) system.file("examples", f, package = "Sxslt"))
其中 files[1]
是一个 xml 文件,files[2]
是一个 xsl 文件
xmlParse(files[[1]])
<?xml version="1.0"?>
<test>
<sqrt>9</sqrt>
<date/>
<code>mean(rnorm(10000))</code>
</test>
然后使用Sxslt
应用样式表
xsltApplyStyleSheet(files[1], files[2])
给予
$doc
<?xml version="1.0" standalone="yes"?>
<HTML>
<body>
sqrt: 3
pow: 81
date: Thu Jan 15 06:46:54 2015<i class="output">-0.0140224652198879</i>
substring: an(rnor</body>
</HTML>
$stylesheet
An object of class "XSLStyleSheet"
Slot "ref":
<pointer: 0x108ef2a60>
$status
OK
0
attr(,"class")
[1] "XMLInternalXSLTDocument"
关于安装 Sxslt 的额外指导
- 您需要先在 linux 机器上安装
libxslt-dev
- 最新版本不再适用于 R 3.1.2,也不会从源进一步安装到 Bug #1 在它的 repo 上。好心的 bug 提出者拿了一个 fork 并修复了这个包,所以你可以使用
devtools::install_github("cboettig/Sxslt")
来安装它。
该版本不再有效,但您可以使用:
install.packages("remotes")
remotes::install_github("omegahat/Sxslt")
我目前正在由 SQL Server Reporting Services 执行任务,它使用将典型模式转换为定制模式的 XSLT 将数据集导出为 XML 格式。为了替换这份报告,我需要能够在用户想要下载它时进行类似的转换XML。
XSLT 生成的最终布局很糟糕 - 它涉及填充和各种古怪的连接,我宁愿不通过在从数据到 XML 的第一次转换中进行整个转换来重新发明轮子。
我的 google-fu 让我失望了:如何使用 R 通过 XSLT 转换 XML?
MWE
这是一个使用 iris 数据并将其转换为 XML 的脚本(我使用 CRAN 的包纯粹是为了降低示例中的代码级别)。然后我有 an XSLT (on gist) 当我 运行 中的 XML 通过 Visual Studio 转换 XML 但我不知道如何翻译 activity 进入 R.
library(optiRum)
library(XML)
irisdata<-convertToXML(iris)
saveXML(irisdata,"iris.xml")
我认为您正在寻找 Sxslt
包,仅使用示例数据
library("Sxslt")
library("XML")
files <- sapply(c("sqrt.xml", "sqrt.xsl"), function(f) system.file("examples", f, package = "Sxslt"))
其中 files[1]
是一个 xml 文件,files[2]
是一个 xsl 文件
xmlParse(files[[1]])
<?xml version="1.0"?>
<test>
<sqrt>9</sqrt>
<date/>
<code>mean(rnorm(10000))</code>
</test>
然后使用Sxslt
应用样式表
xsltApplyStyleSheet(files[1], files[2])
给予
$doc
<?xml version="1.0" standalone="yes"?>
<HTML>
<body>
sqrt: 3
pow: 81
date: Thu Jan 15 06:46:54 2015<i class="output">-0.0140224652198879</i>
substring: an(rnor</body>
</HTML>
$stylesheet
An object of class "XSLStyleSheet"
Slot "ref":
<pointer: 0x108ef2a60>
$status
OK
0
attr(,"class")
[1] "XMLInternalXSLTDocument"
关于安装 Sxslt 的额外指导
- 您需要先在 linux 机器上安装
libxslt-dev
- 最新版本不再适用于 R 3.1.2,也不会从源进一步安装到 Bug #1 在它的 repo 上。好心的 bug 提出者拿了一个 fork 并修复了这个包,所以你可以使用
devtools::install_github("cboettig/Sxslt")
来安装它。
该版本不再有效,但您可以使用:
install.packages("remotes")
remotes::install_github("omegahat/Sxslt")