xml XSLT, , XML R- . : R XSLT.
, R ( , Python, PHP, Java ..) . : Windows ( Powershell XslCompiledTransform) Linux/Mac ( xsltproc ):
XSLT Script ( .xsl, XML )
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="/households">
<xsl:copy>
<xsl:apply-templates select="household"/>
</xsl:copy>
</xsl:template>
<xsl:template match="household|members|member|member_process|individual_audience|individual_audience_tvset">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="channel">
<tvset>
<date><xsl:value-of select="ancestor::households/@date"/></date>
<household_id><xsl:value-of select="ancestor::household/@id"/></household_id>
<member_id><xsl:value-of select="ancestor::member/@id"/></member_id>
<session><xsl:value-of select="@session"/></session>
<begin><xsl:value-of select="@begin"/></begin>
<end><xsl:value-of select="@end"/></end>
</tvset>
</xsl:template>
<xsl:template match="tvsets"/>
</xsl:transform>
PowerShell Script ( .ps1 , Windows)
param ($xml, $xsl, $output)
if (-not $xml -or -not $xsl -or -not $output) {
Write-Host "& .\xslt.ps1 [-xml] xml-input [-xsl] xsl-input [-output] transform-output"
exit;
}
trap [Exception]{
Write-Host $_.Exception;
}
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
$xslt.Load($xsl);
$xslt.Transform($xml, $output);
Write-Host "generated" $output;
R (Windows)
library(XML)
system(paste0('Powershell.exe -File',
' "C:\\Path\\To\\PowerShell\\Script.ps1"',
' "C:\\Path\\To\\Input.xml"',
' "C:\\Path\\To\\XSLT\\Script.xsl"',
' "C:\\Path\\To\\Output.xml"'))
df <- xmlToDataFrame("C:\\Path\\To\\Output.xml")
head(df, 10)
R (Linux/Mac)
library(XML)
system('xsltproc /path/to/XSLT_Script.xsl /path/to/Input.xml -o path/to/Output.xml')
df <- xmlToDataFrame("path/to/Output.xml")