i have xml file transform using populated xsl sheet. sas has proc xsl should able perfrom task, instead following error
error: javax.xml.transform.transformerconfigurationexception: failed compile stylesheet. 6 errors detected. error: java.io.ioexception: pipe closed
has else encountered error this? java error related sas or problem xsl file (see full file below).``
<?xml version="1.0"?> -<xsl:stylesheet xmlns:d7p1="http://www.w3.org/2001/xmlschema" xmlns:d5p1="http://www.itron.com/ami/2008/10/events" xmlns:d3p1="http://www.itron.com/ami/2008/10/common" xmlns:d2p1="http://www.itron.com/ami/2008/10/data" xmlns:i="http://www.w3.org/2001/xmlschema-instance" xmlns:itron="http://schemas.datacontract.org/2004/07/itron.ami.amiservicetest.hosting" xmlns="http://www.w3.org/tr/rec-html40" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:local="#local-functions" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> -<xsl:template match="/"> <div>ami data</div> -<xsl:for-each select="xmlroot/itron:datasubscriberitem"> -<div> <xsl:variable select="itron:dataarrivedinput/d2p1:readdatacollection/d2p1:readdata/d2p1:loadprofilechannels/d2p1:loadprofilechannel/d2p1:timedataend" name="endtime"/> time data end: <xsl:value-of select="$endtime"/> </div> -<div> <xsl:variable select="itron:dataarrivedinput/d2p1:readdatacollection/d2p1:readdata/d2p1:loadprofilechannels/d2p1:loadprofilechannel/d2p1:pulsemultiplier" name="pulsmult"/> pulse multiplier: <xsl:value-of select="$pulsmult"/> </div> -<div> meter id: <xsl:value-of select="itron:dataarrivedinput/d2p1:readdatacollection/d2p1:readdata/d2p1:identifier"/> </div> -<table cellspacing="0" cellpadding="0" border="1"> -<tr style="background-color:#c0c0c0; font-weight:bold"> <td>num</td> <td>vh(a)</td> <td>max v(a)</td> <td>min v(a)</td> <td>vh(c)</td> <td>max v(c)</td> <td>min v(c)</td> <td>timestamp</td> </tr> <xsl:variable select="count(itron:dataarrivedinput/d2p1:readdatacollection/d2p1:readdata/d2p1:loadprofilechannels/d2p1:loadprofilechannel[1]/d2p1:intervalvalues/d2p1:intervalvalue)" name="numpnts"/> -<div> number of points: <xsl:value-of select="$numpnts"/> </div> -<xsl:for-each select="itron:dataarrivedinput/d2p1:readdatacollection/d2p1:readdata/d2p1:loadprofilechannels/d2p1:loadprofilechannel[1]/d2p1:intervalvalues/d2p1:intervalvalue"> <xsl:variable select="position()" name="inum"/> <xsl:variable select="../../d2p1:timedataend" name="endtime2"/> -<tr> -<td> <xsl:value-of select="$inum"/> </td> <xsl:variable select="d2p1:channelvalue" name="vha"/> -<td> <!--<xsl:value-of select="$vha*$pulsmult"/>--> <xsl:value-of select="format-number($vha*$pulsmult,"0.###")"/> </td> <xsl:variable select="../../../d2p1:loadprofilechannel[2]/d2p1:intervalvalues/d2p1:intervalvalue[$inum]/d2p1:channelvalue" name="vmaxa"/> -<td> <xsl:value-of select="format-number($vmaxa*$pulsmult,"0.###")"/> </td> <xsl:variable select="../../../d2p1:loadprofilechannel[3]/d2p1:intervalvalues/d2p1:intervalvalue[$inum]/d2p1:channelvalue" name="vmina"/> -<td> <xsl:value-of select="format-number($vmina*$pulsmult,"0.###")"/> </td> <xsl:variable select="../../../d2p1:loadprofilechannel[4]/d2p1:intervalvalues/d2p1:intervalvalue[$inum]/d2p1:channelvalue" name="vhc"/> -<td> <xsl:value-of select="format-number($vhc*$pulsmult,"0.###")"/> </td> <xsl:variable select="../../../d2p1:loadprofilechannel[5]/d2p1:intervalvalues/d2p1:intervalvalue[$inum]/d2p1:channelvalue" name="vmaxc"/> -<td> <xsl:value-of select="format-number($vmaxc*$pulsmult,"0.###")"/> </td> <xsl:variable select="../../../d2p1:loadprofilechannel[6]/d2p1:intervalvalues/d2p1:intervalvalue[$inum]/d2p1:channelvalue" name="vminc"/> -<td> <xsl:value-of select="format-number($vminc*$pulsmult,"0.###")"/> </td> -<td> <xsl:variable select="concat(substring($endtime2, 1,10), ' ', substring($endtime2, 12,5))" name="sdts"/> <xsl:value-of select="local:timecalc($sdts, $inum, $numpnts)"/> </td> </tr> </xsl:for-each> </table> <hr/> </xsl:for-each> </xsl:template> -<msxsl:script language="vbscript" implements-prefix="local"> <![cdata[ function timecalc(et, pt, tp) sdt1 = cdate(et) sdt = dateadd("n", -(tp-pt)*5, sdt1) ttr = padout(month(sdt)) & "/" & padout(day(sdt)) & "/" & year(sdt)& " " & padout(hour(sdt)-4) & ":" & padout(minute(sdt)) timecalc = ttr end function function padout(n) if n < 10 padout = "0" & n else padout = n end if end function ]]> </msxsl:script> </xsl:stylesheet> here sas code
proc xsl in='c:\sas files\input.xml' out='c:\sas files\output.xml' xsl='c:\sas files\stylesheet.xsl'; run;
use different quotes within expression.
use
select="format-number($vha*$pulsmult,'0.###')" instead of
select="format-number($vha*$pulsmult,"0.###")"
Comments
Post a Comment