LOCAL XMLSource AS String m.XMLSource = GETFILE("xml") LOCAL XMLComplexExcel AS String TEXT TO m.XMLComplexExcel NOSHOW <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes" cdata-section-elements="Instructions"/> <xsl:template match="/"> <xsl:element name="VFPData"> <xsl:call-template name="record"> <xsl:with-param name="table" select="/ss:Workbook/ss:Worksheet[@ss:Name='Sheet1']/ss:Table"/> </xsl:call-template> </xsl:element> </xsl:template> <xsl:template name="record"> <xsl:param name="base" select="4"/> <xsl:param name="table"/> <xsl:variable name="procId" select="$table/ss:Row[$base]/ss:Cell[2]/ss:Data"/> <xsl:if test="$procId"> <xsl:element name="Procedure"> <xsl:element name="procedureId"> <xsl:value-of select="$procId"/> </xsl:element> <xsl:element name="procedureName"> <xsl:value-of select="$table/ss:Row[$base]/ss:Cell[3]/ss:Data"/> </xsl:element> <xsl:element name="EstHrs"> <xsl:value-of select="$table/ss:Row[$base + 1]/ss:Cell[2]/ss:Data"/> </xsl:element> <xsl:element name="Type"> <xsl:value-of select="$table/ss:Row[$base + 1]/ss:Cell[4]/ss:Data"/> </xsl:element> <xsl:element name="Skill"> <xsl:value-of select="$table/ss:Row[$base + 2]/ss:Cell[2]/ss:Data"/> </xsl:element> <xsl:element name="Shutdown"> <xsl:value-of select="$table/ss:Row[$base + 2]/ss:Cell[4]/ss:Data"/> </xsl:element> <xsl:element name="Reading"> <xsl:value-of select="$table/ss:Row[$base + 3]/ss:Cell[2]/ss:Data"/> </xsl:element> <xsl:element name="Instructions"> <xsl:value-of select="$table/ss:Row[$base + 5]/ss:Cell[1]/ss:Data"/> </xsl:element> </xsl:element> <xsl:call-template name="record"> <xsl:with-param name="table" select="$table"/> <xsl:with-param name="base" select="$base + 10"/> </xsl:call-template> </xsl:if> </xsl:template> </xsl:stylesheet> ENDTEXT LOCAL XMLDom AS MSXML2.DOMDocument60 LOCAL XSLT AS MSXML2.DOMDocument60 m.XMLDom = CREATEOBJECT("MSXML2.DOMDocument.6.0") m.XMLDom.async = .F. m.XMLDom.load(m.XMLSource) m.XSLT = CREATEOBJECT("MSXML2.DOMDocument.6.0") m.XSLT.async = .F. m.XSLT.loadXML(m.XMLComplexExcel) XMLTOCURSOR(m.XMLDom.transformNode(m.XSLT), "testCursor") SELECT testCursor BROWSE