XML - 如何将子项与其父项匹配

时间:2011-07-12 09:22:39

标签: xml xslt

以下是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 个答案:

答案 0 :(得分:2)

看来你完成了99%的工作。如果我理解正确,您希望根据root/claims/Numberroot/claims/row/CNumber对应关系为特定主记录映射记录。鉴于您的问题中的输入示例,您似乎只需更改XSLT中的行,因为数据已经正确分组。

即改变这一点:

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

选择输入文档中的所有行,即:

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

选择当前上下文中的行。如果更改此行,子记录将显示在相应的主记录下。