diadiavova, спасибо большое, что помогли Выкладываю то, что можно назвать конечным результатом (на самом деле xsl - конечный вариант, а xml - просто пример который первый попался(извиняйте за то, что он очень разреженный и не содержит какой либо нормальной информации, всё таки интеллектуальная собственность, всё такое )) Конечно этот xsl тюнить и тюнить, но всё таки...
Вот xml
| Код | <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="template.xsl"?> <RESULT objectColumn="" FOOTER="3 rows are displayed" AUTO_SAVE="false" START_OBJECT_LABEL="Object" REPORT_NAME="Find Circuit " SERVER_URL="http://google.com" SCROLL="NO" FREEZE_ROW="NO" FREEZE_COLUMN="NO"> <COLUMNS hideSorting="TRUE"> <COLUMN NAME="NAME" shownName="Name" columnType="12"/> <COLUMN NAME="COLUMN_9126566565513267334" shownName="1" columnType="12"/> <COLUMN NAME="COLUMN_13" shownName="Interface" columnType="12"/> <COLUMN NAME="COLUMN_1102358942013191703" shownName="2" columnType="12"/> <COLUMN NAME="COLUMN_3090562190013347600" shownName="3" columnType="12"/> <COLUMN NAME="COLUMN_9126429325513583408" shownName="4" columnType="12"/> <COLUMN NAME="COLUMN_9126567546013268378" shownName="5" columnType="12"/> <COLUMN NAME="COLUMN_9127113290013953116" shownName="6" columnType="12"/> <COLUMN NAME="COLUMN_9127113290013953119" shownName="7" columnType="12"/> <COLUMN NAME="COLUMN_9126567546013268379" shownName="8" columnType="12"/> <COLUMN NAME="COLUMN_9126429325513583409" shownName="9" columnType="12"/> <COLUMN NAME="COLUMN_3090562190013347601" shownName="10" columnType="12"/> <COLUMN NAME="COLUMN_9124474886713040171" shownName="11" columnType="12"/> <COLUMN NAME="COLUMN_9124467342413035615" shownName="12" columnType="12"/> <COLUMN NAME="COLUMN_9126438555313585107" shownName="13" columnType="12"/> <COLUMN NAME="COLUMN_9124449732613030630" shownName="14" columnType="12"/> <COLUMN NAME="COLUMN_9124449732613030639" shownName="15" columnType="12"/> <COLUMN NAME="COLUMN_9127534151413029138" shownName="16" columnType="12"/> <COLUMN NAME="COLUMN_9126100468713877944" shownName="17" columnType="12"/> <COLUMN NAME="COLUMN_9124329804213992857" shownName="18" columnType="12"/> <COLUMN NAME="COLUMN_5011567051013639472" shownName="19" columnType="12"/> </COLUMNS> <ROW ORDER="0"> <COLUMN NAME="NAME">name</COLUMN> <COLUMN NAME="COLUMN_9126566565513267334">11111</COLUMN> <COLUMN NAME="COLUMN_13"/> <COLUMN NAME="COLUMN_1102358942013191703"/> <COLUMN NAME="COLUMN_3090562190013347600"/> <COLUMN NAME="COLUMN_9126429325513583408"/> <COLUMN NAME="COLUMN_9126567546013268378">9127639111913109188|::|22</COLUMN> <COLUMN NAME="COLUMN_9127113290013953116">9127639112413181646|::|17|:|9127639112413181647|::|18</COLUMN> <COLUMN NAME="COLUMN_9127113290013953119"/> <COLUMN NAME="COLUMN_9126567546013268379"/> <COLUMN NAME="COLUMN_9126429325513583409"/> <COLUMN NAME="COLUMN_3090562190013347601"/> <COLUMN NAME="COLUMN_9124474886713040171">Planned</COLUMN> <COLUMN NAME="COLUMN_9124467342413035615"/> <COLUMN NAME="COLUMN_9126438555313585107"/> <COLUMN NAME="COLUMN_9124449732613030630"/> <COLUMN NAME="COLUMN_9124449732613030639">some</COLUMN> <COLUMN NAME="COLUMN_9127534151413029138"/> <COLUMN NAME="COLUMN_9126100468713877944"/> <COLUMN NAME="COLUMN_9124329804213992857"/> <COLUMN NAME="COLUMN_5011567051013639472">test</COLUMN> </ROW> <ROW ORDER="1"> <COLUMN NAME="NAME">name 2</COLUMN> <COLUMN NAME="COLUMN_9126566565513267334">22</COLUMN> <COLUMN NAME="COLUMN_13"/> <COLUMN NAME="COLUMN_1102358942013191703"/> <COLUMN NAME="COLUMN_3090562190013347600"/> <COLUMN NAME="COLUMN_9126429325513583408"/> <COLUMN NAME="COLUMN_9126567546013268378"/> <COLUMN NAME="COLUMN_9127113290013953116"/> <COLUMN NAME="COLUMN_9127113290013953119">9127639112413181649|::|17|:|9127639112413181648|::|18|:|9127639112413182463|::|19</COLUMN> <COLUMN NAME="COLUMN_9126567546013268379">9127639111913109189|::|3</COLUMN> <COLUMN NAME="COLUMN_9126429325513583409"/> <COLUMN NAME="COLUMN_3090562190013347601"/> <COLUMN NAME="COLUMN_9124474886713040171">Planned</COLUMN> <COLUMN NAME="COLUMN_9124467342413035615"/> <COLUMN NAME="COLUMN_9126438555313585107"/> <COLUMN NAME="COLUMN_9124449732613030630"/> <COLUMN NAME="COLUMN_9124449732613030639">some 2</COLUMN> <COLUMN NAME="COLUMN_9127534151413029138"/> <COLUMN NAME="COLUMN_9126100468713877944"/> <COLUMN NAME="COLUMN_9124329804213992857"/> <COLUMN NAME="COLUMN_5011567051013639472">test 2</COLUMN> </ROW> <ROW ORDER="2"> <COLUMN NAME="NAME">name 3</COLUMN> <COLUMN NAME="COLUMN_9126566565513267334">333</COLUMN> <COLUMN NAME="COLUMN_13"/> <COLUMN NAME="COLUMN_1102358942013191703"/> <COLUMN NAME="COLUMN_3090562190013347600"/> <COLUMN NAME="COLUMN_9126429325513583408"/> <COLUMN NAME="COLUMN_9126567546013268378">9127639111913109328|::|15</COLUMN> <COLUMN NAME="COLUMN_9127113290013953116">9127639112413182807|::|15|:|9127639112413182808|::|16</COLUMN> <COLUMN NAME="COLUMN_9127113290013953119"/> <COLUMN NAME="COLUMN_9126567546013268379"/> <COLUMN NAME="COLUMN_9126429325513583409"/> <COLUMN NAME="COLUMN_3090562190013347601"/> <COLUMN NAME="COLUMN_9124474886713040171">Planned</COLUMN> <COLUMN NAME="COLUMN_9124467342413035615"/> <COLUMN NAME="COLUMN_9126438555313585107"/> <COLUMN NAME="COLUMN_9124449732613030630"/> <COLUMN NAME="COLUMN_9124449732613030639">some 3</COLUMN> <COLUMN NAME="COLUMN_9127534151413029138"/> <COLUMN NAME="COLUMN_9126100468713877944"/> <COLUMN NAME="COLUMN_9124329804213992857"/> <COLUMN NAME="COLUMN_5011567051013639472">test 3</COLUMN> </ROW> </RESULT>
|
А вот, собственно, то, ради чего всё это затевалось
| Код | <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/RESULT">
<xsl:processing-instruction name="mso-application">progid="Excel.Sheet"</xsl:processing-instruction> <xsl:variable name="serverUrl" select="@SERVER_URL"/> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <Styles> <Style ss:ID="Default" ss:Name="Normal"> <Alignment ss:Vertical="Bottom"/> <Borders/> <Font x:CharSet="204"/> <Interior/> <NumberFormat/> <Protection/> </Style> <Style ss:ID="s21"> <Font x:CharSet="204" x:Family="Swiss" ss:Bold="1"/> </Style> <Style ss:ID="s33" ss:Name="Hyperlink"> <Font x:CharSet="204" ss:Color="#0000FF" ss:Underline="Single"/> </Style> </Styles>
<Worksheet ss:Name="{@REPORT_NAME}"> <Table> <xsl:for-each select="COLUMNS/COLUMN"> <Column ss:AutoFitWidth="1"/> </xsl:for-each> <Row> <Cell ss:StyleID="s21"> <Data ss:Type="String"> <xsl:value-of disable-output-escaping="yes" select="@REPORT_NAME"/> </Data> </Cell> </Row> <Row> <Cell> <Data ss:Type="String"/> </Cell> </Row> <Row> <xsl:for-each select="COLUMNS/COLUMN"> <Cell ss:StyleID="s21"> <Data ss:Type="String"> <xsl:value-of disable-output-escaping="yes" select="@shownName"/> </Data> </Cell> </xsl:for-each> </Row>
<xsl:for-each select="/RESULT/ROW"> <xsl:variable name="stroke"> <xsl:call-template name="writeStroke"/> </xsl:variable> <xsl:call-template name="getNewRow"> <xsl:with-param name="str" select="substring-after($stroke,'|_|')"/> <xsl:with-param name="url" select="$serverUrl"/> </xsl:call-template> </xsl:for-each>
<Row> <Cell ss:StyleID="s21"> <Data ss:Type="String"> <xsl:value-of disable-output-escaping="yes" select="@FOOTER"/> </Data> </Cell> </Row> </Table> </Worksheet> </Workbook> </xsl:template>
<xsl:template name="writeStroke"> <xsl:for-each select="./COLUMN"> <xsl:value-of select="concat('|_|',.)"/> </xsl:for-each> </xsl:template>
<xsl:template name="getNewRow"> <xsl:param name="str"/> <xsl:param name="url"/> <xsl:variable name="stroke"> <xsl:value-of select="$str"/> </xsl:variable> <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet"> <xsl:call-template name="printColumns"> <xsl:with-param name="string" select="$stroke"/> <xsl:with-param name="url" select="$url"/> </xsl:call-template> </Row> <xsl:if test="contains($stroke,'|:|')"> <xsl:variable name="ss"> <xsl:call-template name="isMultiple"> <xsl:with-param name="oldString" select="$stroke"/> <xsl:with-param name="newString" select="''"/> </xsl:call-template> </xsl:variable> <xsl:call-template name="getNewRow"> <xsl:with-param name="str" select="$ss"/> <xsl:with-param name="url" select="$url"/> </xsl:call-template> </xsl:if> </xsl:template>
<xsl:template name="isMultiple"> <xsl:param name="oldString"/> <xsl:param name="newString"/> <xsl:choose> <xsl:when test="contains($oldString,'|_|')"> <xsl:variable name="new"> <xsl:if test="string-length(substring-before($oldString,'|_|'))>0"> <xsl:value-of select="substring-before($oldString,'|_|')"/> </xsl:if> </xsl:variable>
<xsl:choose> <xsl:when test="not(contains($new,'|:|'))"> <xsl:call-template name="isMultiple"> <xsl:with-param name="oldString" select="substring-after($oldString,'|_|')"/> <xsl:with-param name="newString" select="concat($newString,'|_|')"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:call-template name="isMultiple"> <xsl:with-param name="oldString" select="substring-after($oldString,'|_|')"/> <xsl:with-param name="newString" select="concat($newString, substring-before(substring-after($oldString,'|:|'),'|_|'),'|_|')"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:when>
<xsl:otherwise> <xsl:value-of select="concat($newString,'|_|')"/> </xsl:otherwise> </xsl:choose>
</xsl:template>
<xsl:template name="printColumns" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel"> <xsl:param name="string"/> <xsl:param name="url"/>
<xsl:variable name="temp"> <xsl:choose> <xsl:when test="contains($string,'|_|')"> <xsl:value-of select="substring-before($string,'|_|')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$string"/> </xsl:otherwise> </xsl:choose> </xsl:variable>
<ss:Cell> <xsl:choose> <xsl:when test="contains($temp,'|::|')"> <xsl:attribute name="ss:HRef"> <xsl:value-of select="concat($url,'/test=',substring-before($temp, '|::|'))"/> </xsl:attribute> <xsl:attribute name="ss:StyleID"> <xsl:text>s33</xsl:text> </xsl:attribute> <ss:Data ss:Type="String"> <a> <xsl:attribute name="href"> <xsl:value-of select="substring-before($temp, '|::|')"/> </xsl:attribute> <xsl:choose> <xsl:when test="string-length(substring-before(substring-after($temp,'|::|'),'|:|'))>0"> <xsl:value-of select="substring-before(substring-after($temp,'|::|'),'|:|')"/>
</xsl:when> <xsl:otherwise> <xsl:value-of select="substring-after($temp,'|::|')"/> </xsl:otherwise> </xsl:choose> </a> </ss:Data> </xsl:when>
<xsl:otherwise> <ss:Data ss:Type="String"> <xsl:value-of select="$temp"/> </ss:Data> </xsl:otherwise> </xsl:choose>
</ss:Cell>
<xsl:if test="string-length(substring-after($string,'|_|'))>0"> <xsl:call-template name="printColumns"> <xsl:with-param name="string" select="substring-after($string,'|_|')"/> <xsl:with-param name="url" select="$url"/> </xsl:call-template> </xsl:if> </xsl:template>
</xsl:stylesheet>
|
|