XML - как сопоставить детей с его родителем - PullRequest
2 голосов
/ 12 июля 2011

Ниже приведены XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <html>
            <body>
                <table cellpadding="6" cellspacing="0" border="0" width="85%" align="left">
                    <tr>
                        <td>
                            <table cellpadding="0" cellspacing="1" border="1" class="reporttable" width="100%">
                                <tr>
                                    <td class="tableheader" align="center">Claim No</td>
                                    <td class="tableheader" align="center">Name</td>
                                    <td class="tableheader" align="center">Gross Total Amount</td>
                                    <td class="tableheader" align="center">Expense Type</td>
                                    <td class="tableheader" align="center">CNumber</td>
                                    <td class="tableheader" align="center">Code</td>
                                </tr>
                                <xsl:for-each select="//claims">
                                <tr>
                                    <td><xsl:value-of select="@Number"/></td>
                                    <td><xsl:value-of select="@Fullname"/></td>
                                    <td><xsl:value-of select="@GrossTotalAmount"/></td>                                     
                                    <xsl:for-each select="//row">
                                    <tr>
                                        <td colspan="3"></td>
                                        <td class="tablecontent1"><xsl:value-of select="@ExpenseType"/></td>
                                        <td class="tablecontent1"><xsl:value-of select="@CNumber"/></td>
                                        <td class="tablecontent1"><xsl:value-of select="@Code"/></td>
                                        <td class="tablecontent1"><xsl:value-of select="@Party"/></td>
                                        <td class="tablecontent1"><xsl:value-of select="@T8Code"/></td>
                                    </tr>
                                    </xsl:for-each>
                                </tr>
                                </xsl:for-each>
                            </table>
                        </td>
                    </tr>
                </table>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

и введите xml

<claims Number="xQAJUN1048" Fullname="almond pdr" GrossTotalAmount="6747.00">
    <row element="item" CNumber="xQAJUN1048" ExpenseType="AC FIXED ASSET" Code="-" />
    <row element="item" CNumber="xQAJUN1048" ExpenseType="ADM CENTRE &amp; VAT/TAXES" Code="FEP" />
</claims>
<claims Number="M11JUN1053" Fullname="almond pdr" GrossTotalAmount="450.00">
    <row element="item" CNumber="M11JUN1053" ExpenseType="ANT FIXED ASSET" Code="ASTON" />
</claims>
<claims Number="xQAJUN1060" Fullname="almond pdr" GrossTotalAmount="240.00">
    <row element="item" CNumber="xQAJUN1060" ExpenseType="CDF FIXED ASSET" Code="ASTON" />
</claims>

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

Может ли кто-нибудь помочь мне в этом:)

Спасибо

:( извините, невозможно опубликовать изображения из-за ограничений сайта

1 Ответ

2 голосов
/ 12 июля 2011

Кажется, вы сделали 99% работы.Если я правильно понимаю, вы хотите, чтобы записи отображались для конкретной основной записи в соответствии с соответствиями root/claims/Number и root/claims/row/CNumber.Учитывая входную выборку в вашем вопросе, кажется, что вам нужно всего лишь изменить строку в вашем XSLT, потому что данные уже правильно сгруппированы.

То есть измените это:

 <xsl:for-each select="//row">

, чтовыбирает все строки во входном документе, к этому:

  <xsl:for-each select="row">

, который выбирает строки в текущем контексте.Если вы измените эту строку, дочерние записи появятся под соответствующей основной записью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...