Hi there.
I have problem with this files xsl, the problem is the output for the field date and number:
- 2011-05-13T21:50:00 instead of 13/05/2001 21:50:00 (because in mysql the field is dateTime)
- .00 instead of 0 (because in mysql the field is decimal 10,2).
Can you help me?
Thanks in advance.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/">
<!-- show a header by looking Schema element -->
<xsl:for-each select="/xml/s:Schema/s:ElementType/s:AttributeType">
<xsl:value-of select="@name"/>
<xsl:choose>
<xsl:when test="position()!=last()">
<!-- xls -->
<xsl:text>	</xsl:text>
<!-- csv -->
<!--xsl:text>,</xsl:text-->
</xsl:when>
<xsl:otherwise>
<xsl:text>
</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<!-- row data -->
<xsl:for-each select="/xml/rs:data/z:row">
<xsl:variable name="row" select="."/>
<!-- for each column -->
<xsl:for-each select="/xml/s:Schema/s:ElementType/s:AttributeType">
<!-- display each column if it exists -->
<xsl:variable name="columnName" select="@name"/>
<!-- go through all columns and display something that matches-->
<xsl:value-of select="$row/@*[name()=$columnName]" />
<!--xsl:value-of select="translate($row/@*[name()=$columnName],'.',',')" /-->
<xsl:if test="position()!=last()">
<!-- xls -->
<xsl:text>	</xsl:text>
<!-- csv -->
<!--xsl:text>,</xsl:text-->
</xsl:if>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Can you please place current output here. May be few lines, just to understand better about output data based on that we can format date/time.
Thanks for your answer, I appreciated much.
This is the output in XML:
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="eltOnly" rs:CommandTimeout="30">
<s:AttributeType name="myDates" rs:number="6" rs:nullable="true" rs:writeunknown="true">
<s:datatype dt:type="dateTime" rs:dbtype="timestamp" dt:maxLength="16" rs:scale="0" rs:precision="19" rs:fixedlength="true"/>
</s:AttributeType>
<s:AttributeType name="Net" rs:number="29" rs:nullable="true" rs:writeunknown="true">
<s:datatype dt:type="number" rs:dbtype="numeric" dt:maxLength="19" rs:scale="2" rs:precision="10" rs:fixedlength="true"/>
</s:AttributeType>
<s:extends type="rs:rowbase"/>
</s:ElementType>
</s:Schema>
<rs:data>
[B][COLOR="Red"]<z:row myDates="2011-08-22T03:03:52" Net=".00" />[/COLOR][/B]
</rs:data>
</xml>
This output XML is generate with ASP code and saved in the csv format:
<!-- #include virtual="/_XML/adovbs.inc" -->
<%
filename = "titty.xml"
Set xmlDoc = CreateObject("MSXML2.DOMDocument.4.0")
Set xslDoc = CreateObject("MSXML2.DOMDocument.4.0")
%>
<%
sql = "SELECT * FROM tbl_login"
Set rs = objConn.Execute(sql)
rs.Save xmlDoc, 1
xmlDoc.Save Server.MapPath(filename)
rs.Close
Set rs = Nothing
%>
<%
Set oDOM = CreateObject("MSXML2.DOMDocument.4.0")
oDOM.async = False
oDOM.Load Server.Mappath(filename)
Set oXSL = CreateObject("MSXML2.DOMDocument.4.0")
oXSL.async = False
[COLOR="Red"][B]oXSL.Load Server.Mappath("Trasform_csv.xsl") [/B][/COLOR] <<< This is the file xsl #1
strTransform = oDOM.transformNode(oXSL)
Set fso = CreateObject("Scripting.FileSystemObject")
strPath = Server.Mappath("testme.csv")
Set file = fso.opentextfile(strPath, 2, True)
file.write strTransform
file.Close
Set file = Nothing
Set fso = Nothing
Set oDOM = Nothing
Set oXML = Nothing
Set oXSL = Nothing
%>
I need another output in the XML file:
[B][COLOR="SeaGreen"]<z:row myDates="13/05/2001 21:50:00" Net="0.00" />[/COLOR][/B]
And in the CSV file:
[COLOR="SeaGreen"][B]13/05/2001 21:50:00, 0[/B][/COLOR]
I don’t know any direct way to format the date & time.
But i use substring to split date & time to get my required format.
$date variable contains 2011-08-22T03:03:52
<xsl:value-of select=“concat(substring($date, 6,2), ‘/’, substring($date, 9,2), ‘/’, substring($date, 1,4), ’ ', substring($date, 12))” />
Thanks but not working:
msxml4.dll (0x80004005)
Unable to resolve a reference to the variable or parameter “myDates”. The variable or parameter are not defined or are not in valid.

XML file:
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="eltOnly" rs:CommandTimeout="30">
<s:AttributeType name="myDates" rs:number="1" rs:nullable="true" rs:writeunknown="true">
<s:datatype dt:type="dateTime" rs:dbtype="timestamp" dt:maxLength="16" rs:scale="0" rs:precision="19" rs:fixedlength="true"/>
</s:AttributeType>
<s:AttributeType name="Net" rs:number="2" rs:nullable="true" rs:writeunknown="true">
<s:datatype dt:type="number" rs:dbtype="numeric" dt:maxLength="19" rs:scale="2" rs:precision="10" rs:fixedlength="true"/>
</s:AttributeType>
<s:extends type="rs:rowbase"/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row myDates="2011-05-13T21:50:00" Net=".00"/>
<z:row myDates="2011-05-13T21:50:00" Net=".00"/>
<z:row myDates="2011-05-13T21:50:00" Net="2.00"/>
<z:row myDates="2011-05-13T21:50:00" Net="3.00"/>
<z:row myDates="2011-05-13T21:50:00" Net="45.00"/>
<z:row myDates="2011-05-13T21:50:00" Net="9.00"/>
<z:row myDates="2011-05-13T21:50:00" Net="88.00"/>
<z:row myDates="2011-05-13T21:50:00" Net="188.00"/>
<z:row myDates="2011-05-13T21:50:00" Net="14.00"/>
<z:row myDates="2011-05-13T21:50:00" Net="9.00"/>
<z:row myDates="2011-05-13T21:50:00" Net="4.00"/>
<z:row myDates="2011-05-13T21:50:00" Net="2.00"/>
<z:row myDates="2011-05-13T21:50:00" Net="5.00"/>
<z:row myDates="2011-05-13T21:50:00" Net="1.00"/>
<z:row myDates="2011-05-13T21:50:00" Net=".00"/>
<z:row myDates="2011-05-13T21:50:00" Net=".00"/>
<z:row myDates="2011-05-13T21:50:00" Net=".00"/>
<z:row myDates="2011-05-13T21:50:00" Net=".00"/>
<z:row myDates="2011-05-13T21:50:00" Net="1.00"/>
<z:row myDates="2011-05-13T21:50:00" Net="4.00"/>
</rs:data>
</xml>
XSL file:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/">
<!-- show a header by looking Schema element -->
<xsl:for-each select="/xml/s:Schema/s:ElementType/s:AttributeType">
<xsl:value-of select="@name"/>
<xsl:choose>
<xsl:when test="position()!=last()">
<!-- xls -->
<xsl:text>	</xsl:text>
<!-- csv -->
<!--xsl:text>,</xsl:text-->
</xsl:when>
<xsl:otherwise>
<xsl:text>
</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<!-- row data -->
<xsl:for-each select="/xml/rs:data/z:row">
<xsl:variable name="row" select="."/>
<!-- for each column -->
<xsl:for-each select="/xml/s:Schema/s:ElementType/s:AttributeType">
<!-- display each column if it exists -->
<xsl:variable name="columnName" select="@name"/>
<!-- go through all columns and display something that matches-->
<xsl:value-of select="$row/@*[name()=$columnName]" />
[COLOR="Red"][B] <xsl:value-of select="concat(substring($myDates, 6,2), '/', substring($myDates, 9,2), '/', substring($myDates, 1,4), ' ', substring($DataInterr, 12))" />[/B][/COLOR]
<!--xsl:value-of select="translate($row/@*[name()=$columnName],'.',',')" /-->
<xsl:if test="position()!=last()">
<!-- xls -->
<xsl:text>	</xsl:text>
<!-- csv -->
<!--xsl:text>,</xsl:text-->
</xsl:if>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
This is the solution in the ASP code:
SELECT DATE_FORMAT(myDates, '%d/%m/%Y %H:%i:%s') myDates
, REPLACE(NET,'.', ',') NET
I try this code:
<xsl:variable name="columnName" select="@name"/>
<xsl:variable name="myDates" select="@name"/>
<xsl:variable name="Net" select="@name"/>
<xsl:choose>
<xsl:when test="$row/@*[name()=$myDates]">
<xsl:value-of select="concat(substring($row/@*[name()=$myDates], 9,2), '/', substring($row/@*[name()=$myDates], 6,2), '/', substring($row/@*[name()=$myDates], 1,4), ' ', substring($row/@*[name()=$myDates], 12))" />
</xsl:when>
<xsl:when test="$row/@*[name()=$Net]">
<xsl:value-of select='format-number($row/@*[name()=$Net], "#.00")' />
</xsl:when>
</xsl:choose>
But I have this output:
myDates Net
13/05/2011 21.50 //.00
Why the value field Net
is //.00 ???

They’ve got to be coming from the $myDates select no?
Is its syntax correct?
Maybe the XPATH needs tweaking?
Try this:
Output:
myDates Net
13/05/2011 21.50 //.00
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/">
<!-- show a header by looking Schema element -->
<xsl:for-each select="/xml/s:Schema/s:ElementType/s:AttributeType">
<xsl:value-of select="@name"/>
<xsl:choose>
<xsl:when test="position()!=last()">
<!-- xls -->
<xsl:text>	</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>
</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<!-- row data -->
<xsl:for-each select="/xml/rs:data/z:row">
<xsl:variable name="row" select="."/>
<!-- for each column -->
<xsl:for-each select="/xml/s:Schema/s:ElementType/s:AttributeType">
<!-- display each column if it exists -->
<xsl:variable name="columnName" select="@name"/>
<xsl:variable name="myDates" select="@name"/>
<xsl:choose>
<xsl:when test="($row/@*[name()=$myDates])">
<xsl:value-of select="concat(substring($row/@*[name()=$myDates], 9,2), '/', substring($row/@*[name()=$myDates], 6,2), '/', substring($row/@*[name()=$myDates], 1,4), ' ', substring($row/@*[name()=$myDates], 12))" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="translate($row/@*[name()=$columnName],'/','')" />
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position()!=last()">
<!-- xls -->
<xsl:text>	</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>