Возможность создания заголовка для сгруппированного контента с помощью XSL - PullRequest
0 голосов
/ 17 июня 2020

У меня есть табличное содержимое с указанием c поставщика, которого я хочу применить к группе содержимого, к которой он применяется. См. Отрывок из содержимого в XML.

<?xml version="1.0" encoding="UTF-8"?>
<doc xmlns:fo="http://www.w3.org/1999/XSL/Format" 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">
    <story>
        <text>
            <table>
                <tr xmlns:w="urn:schemas-microsoft-com:office:spreadsheet">
                    <td>F00000W7LM</td>
                    <td>Diversified Growth A</td>
                    <td>&lt;</td>
                    <td>0.00</td>
                    <td>108.26</td>
                    <td/>
                    <td>1.51</td>
                    <td>114.66</td>
                    <td>88.29</td>
                    <td>108.74</td>
                    <td>1st Fusion Asset Management</td>
                    <td>011 731 5290</td>
                    <td>1.44</td>
                    <td>2019-12-31T00:00:00.000</td>
                    <td>ZAR</td>
                    <td>0P00016K7H</td>
                </tr>
                <tr xmlns:w="urn:schemas-microsoft-com:office:spreadsheet">
                    <td>F00000VCZN</td>
                    <td>Guarded A</td>
                    <td>&lt;</td>
                    <td>0.00</td>
                    <td>112.65</td>
                    <td/>
                    <td>3.06</td>
                    <td>113.26</td>
                    <td>100.86</td>
                    <td>112.46</td>
                    <td>1st Fusion Asset Management</td>
                    <td>011 731 5290</td>
                    <td>1.52</td>
                    <td>2019-12-31T00:00:00.000</td>
                    <td>ZAR</td>
                    <td>0P00015E8W</td>
                </tr>
                <tr xmlns:w="urn:schemas-microsoft-com:office:spreadsheet">
                    <td>F00000VCZP</td>
                    <td>Temperate A</td>
                    <td>&lt;</td>
                    <td>0.00</td>
                    <td>110.34</td>
                    <td/>
                    <td>2.40</td>
                    <td>113.98</td>
                    <td>92.34</td>
                    <td>110.78</td>
                    <td>1st Fusion Asset Management</td>
                    <td>011 731 5290</td>
                    <td>1.46</td>
                    <td>2019-12-31T00:00:00.000</td>
                    <td>ZAR</td>
                    <td>0P00015E8Y</td>
                </tr>
                <tr xmlns:w="urn:schemas-microsoft-com:office:spreadsheet">
                    <td>F00000OINH</td>
                    <td>Asset Select FvF A1</td>
                    <td>&lt;</td>
                    <td>0.00</td>
                    <td>161.50</td>
                    <td/>
                    <td/>
                    <td>175.92</td>
                    <td>130.59</td>
                    <td>162.74</td>
                    <td>27Four Investment Managers</td>
                    <td>011 442 2464</td>
                    <td>1.64</td>
                    <td>2020-03-31T00:00:00.000</td>
                    <td>ZAR</td>
                    <td>0P0000WFJ5</td>
                </tr>
                <tr xmlns:w="urn:schemas-microsoft-com:office:spreadsheet">
                    <td>F00000P8T4</td>
                    <td>Gebalanseerde FvF A1</td>
                    <td>&lt;</td>
                    <td>0.00</td>
                    <td>2230.48</td>
                    <td/>
                    <td>46.01</td>
                    <td>2385.31</td>
                    <td>1812.42</td>
                    <td>2245.13</td>
                    <td>27Four Investment Managers</td>
                    <td>011 442 2464</td>
                    <td>1.49</td>
                    <td>2020-03-31T00:00:00.000</td>
                    <td>ZAR</td>
                    <td>0P0000XPFJ</td>
                </tr>
                <tr xmlns:w="urn:schemas-microsoft-com:office:spreadsheet">
                    <td>F000002RCP</td>
                    <td>ShariahAktieweAandeleA1</td>
                    <td>&lt;</td>
                    <td>0.00</td>
                    <td>220.39</td>
                    <td/>
                    <td>1.44</td>
                    <td>238.97</td>
                    <td>174.92</td>
                    <td>221.89</td>
                    <td>27Four Investment Managers</td>
                    <td>011 442 2464</td>
                    <td>1.80</td>
                    <td>2020-03-31T00:00:00.000</td>
                    <td>ZAR</td>
                    <td>0P0000JYV4</td>
                </tr>
                <tr xmlns:w="urn:schemas-microsoft-com:office:spreadsheet">
                    <td>F00000OINK</td>
                    <td>ShariahGebalanseerdeFvFA1</td>
                    <td>&lt;</td>
                    <td>0.00</td>
                    <td>144.89</td>
                    <td/>
                    <td/>
                    <td>156.57</td>
                    <td>128.91</td>
                    <td>145.77</td>
                    <td>27Four Investment Managers</td>
                    <td>011 442 2464</td>
                    <td>1.56</td>
                    <td>2020-03-31T00:00:00.000</td>
                    <td>ZAR</td>
                    <td>0P0000WFJ8</td>
                </tr>
                <tr xmlns:w="urn:schemas-microsoft-com:office:spreadsheet">
                    <td>F00000P8T6</td>
                    <td>Stabiele FvF A1</td>
                    <td>&lt;</td>
                    <td>0.00</td>
                    <td>1853.78</td>
                    <td/>
                    <td>74.06</td>
                    <td>1924.38</td>
                    <td>1542.18</td>
                    <td>1862.09</td>
                    <td>27Four Investment Managers</td>
                    <td>011 442 2464</td>
                    <td>1.40</td>
                    <td>2020-03-31T00:00:00.000</td>
                    <td>ZAR</td>
                    <td>0P0000XPFL</td>
                </tr>
            </table>
        </story>
    </text>
</doc>

<tr[11]> содержит информацию, необходимую для заголовка. Я хотел бы сгруппировать информацию по заголовку с номером, указанным в <tr[12]>, и отображать ее только один раз для каждой группы с использованием XSL 1.0. Смотрите, чего я добился. Текущий метод создает заголовок для всего контента, но я думаю о каком-то подсчете, или если понятие поможет. Любая помощь будет принята с благодарностью.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*"/>
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
</xsl:text>
        <doc xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:w="urn:schemas-microsoft-com:office:spreadsheet" xml:lang="af">
            <story>
                <text>
                    <table>
                        <xsl:for-each select="//tr">
                            <tr colspan="3" class="NewSTOXSubheadEffekte">
                                <td>
                                    <xsl:value-of select="./td[position()='11']"/>
                                    <xsl:text> </xsl:text>
                                    <xsl:value-of select="./td[position()='12']"/>
                                </td>
                            </tr>
                            <tr>
                                <td width="61%" class="NewSTOXEffekeLeft">
                                    <xsl:value-of select="./td[position()='2']"/>
                                </td>
                                <td width="22%" class="NewSTOXEffekeRight">
                                    <xsl:value-of select="./td[position()='10']"/>
                                </td>
                                <td width="17%" class="NewSTOXEffekeRight">
                                    <xsl:value-of select="./td[position()='6']"/>
                                </td>
                            </tr>
                        </xsl:for-each>
                    </table>
                </text>
            </story>
        </doc>
    </xsl:template>
</xsl:stylesheet>

Вот моя попытка использования метода группировки, как указано. Я не получаю никаких результатов и как уже упоминалось. Некоторые указатели были бы действительно классными.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*"/>
    <xsl:output method="xml" indent="yes"/>
    <xsl:key name="by-fundmanager" match="story" use="/td[11]"/>
    <xsl:template match="/">
        <doc xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:w="urn:schemas-microsoft-com:office:spreadsheet" xml:lang="af">
            <story>
                <text>
                    <table>
                        <xsl:for-each select="story[count(. | key('by-fundmanager', td[11])[1]) = 1]">
                            <xsl:sort select="/td[11]"/>
                            <tr>
                                <td colspan="3" class="groupheader">
                                    <xsl:value-of select="string(td[11])/text()"/>
                                    <xsl:text> </xsl:text>
                                    <xsl:value-of select="string(td[12])/text()"/>
                                </td>
                            </tr>
                            <xsl:for-each select="key('by-fundmanager', td[11])">
                                <xsl:sort select="/td[2]"/>
                                <xsl:if test="generate-id() = generate-id(key('by-fundmanager', concat(string(td[11]),string(td[2])))[position() = 1])">
                                    <xsl:element name="td">
                                        <td class="stocksleft" width="61%">
                                            <xsl:value-of select="string(td[2])/text()"/>
                                        </td>
                                        <td class="stocksright" width="22%">
                                            <xsl:value-of select="td[5]/text()"/>
                                        </td>
                                        <td class="stocksright" width="17%">
                                            <xsl:value-of select="td[6]/text()"/>
                                        </td>
                                    </xsl:element>
                                </xsl:if>
                            </xsl:for-each>
                        </xsl:for-each>
                    </table>
                </text>
            </story>
        </doc>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...