首页 > 解决方案 > 使用 xsl 在表中重复标题和数据

问题描述

我尝试使用 XML 中的 xsl 以表格格式生成 html,但无法获得所需的输出:

我的 XML 在下面

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href='ITEM-deg.xsl'?>
<INVOICE version="2.1" xmlns="http://www.opentrans.org/XMLSchema/2.1" xmlns:bmecat="http://www.bmecat.org/bmecat/2005" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <INVOICE_HEADER>
        <CONTROL_INFO>
            <GENERATOR_INFO>automatic</GENERATOR_INFO>
            <GENERATION_DATE>04-01T05:30:37.158+02:00</GENERATION_DATE>
        </CONTROL_INFO>
        <INVOICE_INFO>
            <INVOICE_ID>123456</INVOICE_ID>
            <INVOICE_DATE>04-01</INVOICE_DATE>
            <INVOICE_TYPE>invoice</INVOICE_TYPE>
            <INVOICE_COVERAGE>single</INVOICE_COVERAGE>
            <PARTIES>
                <PARTY>
                   <bmecat:PARTY_ID>221079</bmecat:PARTY_ID>
                    <PARTY_ROLE>invoice_issuer</PARTY_ROLE>
                    <ADDRESS>
                        <bmecat:NAME>Private Limited</bmecat:NAME>
                        <bmecat:STREET>Plot No</bmecat:STREET>
                        <bmecat:CITY>Chennai</bmecat:CITY>
                        <bmecat:STATE>Tamil Nadu</bmecat:STATE>
                        <bmecat:COUNTRY>India</bmecat:COUNTRY>
                        <bmecat:COUNTRY_CODED>IND</bmecat:COUNTRY_CODED>
                    </ADDRESS>
                    <ACCOUNT>
                        <HOLDER>Private Limited </HOLDER>
                        <BANK_ACCOUNT>123456</BANK_ACCOUNT>
                        <BANK_CODE>AUTOINBX</BANK_CODE>
                        <BANK_NAME>AUTObank India</BANK_NAME>
                        <BANK_COUNTRY>IND</BANK_COUNTRY>
                    </ACCOUNT>
                </PARTY>
                <PARTY>
                    <bmecat:PARTY_ID>1</bmecat:PARTY_ID>
                    <PARTY_ROLE>recipient</PARTY_ROLE>
                    <ADDRESS>
                        <bmecat:NAME>Walter</bmecat:NAME>
                        <bmecat:STREET>Genthiner</bmecat:STREET>
                        <bmecat:ZIP>785</bmecat:ZIP>
                        <bmecat:CITY>Ber</bmecat:CITY>
                        <bmecat:COUNTRY>KAmany</bmecat:COUNTRY>
                        <bmecat:COUNTRY_CODED>DAN</bmecat:COUNTRY_CODED>
                        <bmecat:VAT_ID>DAN20747</bmecat:VAT_ID>
                    </ADDRESS>
                </PARTY>
            </PARTIES>
            <INVOICE_ISSUER_IDREF>122079</INVOICE_ISSUER_IDREF>
            <INVOICE_RECIPIENT_IDREF>1</INVOICE_RECIPIENT_IDREF>
            <bmecat:CURRENCY>EUR</bmecat:CURRENCY>
        </INVOICE_INFO>
    </INVOICE_HEADER>
    <INVOICE_ITEM_LIST>
        <INVOICE_ITEM>
            <LINE_ITEM_ID>1</LINE_ITEM_ID>
            <PRODUCT_ID>
                <bmecat:BUYER_PID type="issue">779X-020</bmecat:BUYER_PID>
                <bmecat:DESCRIPTION_LONG>management</bmecat:DESCRIPTION_LONG>
            </PRODUCT_ID>
            <QUANTITY>60</QUANTITY>
            <bmecat:ORDER_UNIT>CT</bmecat:ORDER_UNIT>
            <PRODUCT_PRICE_FIX>
                <bmecat:PRICE_AMOUNT>1.30</bmecat:PRICE_AMOUNT>
                <TAX_DETAILS_FIX>
                    <bmecat:TAX_CATEGORY>rate</bmecat:TAX_CATEGORY>
                    <bmecat:TAX_TYPE>CAT</bmecat:TAX_TYPE>
                    <bmecat:TAX>0.00</bmecat:TAX>
                </TAX_DETAILS_FIX>
            </PRODUCT_PRICE_FIX>
            <PRICE_LINE_AMOUNT>899392.00</PRICE_LINE_AMOUNT>
            <bmecat:ACCOUNTING_INFO>
                <bmecat:COST_CATEGORY_ID>612980250</bmecat:COST_CATEGORY_ID>
            </bmecat:ACCOUNTING_INFO>
            <REMARKS type="Quantity">Pages</REMARKS>
        </INVOICE_ITEM>
        <INVOICE_ITEM>
            <LINE_ITEM_ID>2</LINE_ITEM_ID>
            <PRODUCT_ID>
                <bmecat:BUYER_PID type="issue">1553-779X-020</bmecat:BUYER_PID>
                <bmecat:DESCRIPTION_LONG>IJEEPS content conversion</bmecat:DESCRIPTION_LONG>
            </PRODUCT_ID>
            <QUANTITY>60</QUANTITY>
            <bmecat:ORDER_UNIT>CT</bmecat:ORDER_UNIT>
            <PRODUCT_PRICE_FIX>
                <bmecat:PRICE_AMOUNT>3.05</bmecat:PRICE_AMOUNT>
                <TAX_DETAILS_FIX>
                    <bmecat:TAX_CATEGORY>standard_rate</bmecat:TAX_CATEGORY>
                    <bmecat:TAX_TYPE>VAT</bmecat:TAX_TYPE>
                    <bmecat:TAX>0.00</bmecat:TAX>
                </TAX_DETAILS_FIX>
            </PRODUCT_PRICE_FIX>
            <PRICE_LINE_AMOUNT>183.00</PRICE_LINE_AMOUNT>
            <bmecat:ACCOUNTING_INFO>
                <bmecat:COST_CATEGORY_ID>60310</bmecat:COST_CATEGORY_ID>
            </bmecat:ACCOUNTING_INFO>
            <REMARKS type="Quantity">Pages</REMARKS>
        </INVOICE_ITEM>
        <INVOICE_ITEM>
            <LINE_ITEM_ID>3</LINE_ITEM_ID>
            <PRODUCT_ID>
                <bmecat:BUYER_PID type="issue">779X-020</bmecat:BUYER_PID>
                <bmecat:DESCRIPTION_LONG>IJ</bmecat:DESCRIPTION_LONG>
            </PRODUCT_ID>
            <QUANTITY>20</QUANTITY>
            <bmecat:ORDER_UNIT>CT</bmecat:ORDER_UNIT>
            <PRODUCT_PRICE_FIX>
                <bmecat:PRICE_AMOUNT>1.20</bmecat:PRICE_AMOUNT>
                <TAX_DETAILS_FIX>
                    <bmecat:TAX_CATEGORY>rate</bmecat:TAX_CATEGORY>
                    <bmecat:TAX_TYPE>cAT</bmecat:TAX_TYPE>
                    <bmecat:TAX>0.00</bmecat:TAX>
                </TAX_DETAILS_FIX>
            </PRODUCT_PRICE_FIX>
            <PRICE_LINE_AMOUNT>24.00</PRICE_LINE_AMOUNT>
            <bmecat:ACCOUNTING_INFO>
                <bmecat:COST_CATEGORY_ID>60350</bmecat:COST_CATEGORY_ID>
            </bmecat:ACCOUNTING_INFO>
            <REMARKS type="Quantity">Pages</REMARKS>
        </INVOICE_ITEM>
        <INVOICE_ITEM>
            <LINE_ITEM_ID>4</LINE_ITEM_ID>
            <PRODUCT_ID>
                <bmecat:BUYER_PID type="issue">1553-779X-020</bmecat:BUYER_PID>
                <bmecat:DESCRIPTION_LONG>IJEEPS artwork cat2</bmecat:DESCRIPTION_LONG>
            </PRODUCT_ID>
            <QUANTITY>10</QUANTITY>
            <bmecat:ORDER_UNIT>CT</bmecat:ORDER_UNIT>
            <PRODUCT_PRICE_FIX>
                <bmecat:PRICE_AMOUNT>2.30</bmecat:PRICE_AMOUNT>
                <TAX_DETAILS_FIX>
                    <bmecat:TAX_CATEGORY>standard_rate</bmecat:TAX_CATEGORY>
                    <bmecat:TAX_TYPE>VAT</bmecat:TAX_TYPE>
                    <bmecat:TAX>0.00</bmecat:TAX>
                </TAX_DETAILS_FIX>
            </PRODUCT_PRICE_FIX>
            <PRICE_LINE_AMOUNT>46.00</PRICE_LINE_AMOUNT>
                        <bmecat:ACCOUNTING_INFO>
                <bmecat:COST_CATEGORY_ID>60330</bmecat:COST_CATEGORY_ID>
            </bmecat:ACCOUNTING_INFO>
            <REMARKS type="Quantity">Images</REMARKS>
        </INVOICE_ITEM>
        <INVOICE_ITEM>
            <LINE_ITEM_ID>5</LINE_ITEM_ID>
            <PRODUCT_ID>
                <bmecat:BUYER_PID type="issue">0932-0776-020</bmecat:BUYER_PID>
                <bmecat:DESCRIPTION_LONG>ZNB language editing</bmecat:DESCRIPTION_LONG>
            </PRODUCT_ID>
            <QUANTITY>17</QUANTITY>
            <bmecat:ORDER_UNIT>CT</bmecat:ORDER_UNIT>
            <PRODUCT_PRICE_FIX>
                <bmecat:PRICE_AMOUNT>1.20</bmecat:PRICE_AMOUNT>
                <TAX_DETAILS_FIX>
                    <bmecat:TAX_CATEGORY>standard_rate</bmecat:TAX_CATEGORY>
                    <bmecat:TAX_TYPE>VAT</bmecat:TAX_TYPE>
                    <bmecat:TAX>0.00</bmecat:TAX>
                </TAX_DETAILS_FIX>
            </PRODUCT_PRICE_FIX>
            <PRICE_LINE_AMOUNT>20.40</PRICE_LINE_AMOUNT>
                        <bmecat:ACCOUNTING_INFO>
                <bmecat:COST_CATEGORY_ID>60350</bmecat:COST_CATEGORY_ID>
            </bmecat:ACCOUNTING_INFO>
            <REMARKS type="Quantity">Pages</REMARKS>
        </INVOICE_ITEM>
        <INVOICE_ITEM>
            <LINE_ITEM_ID>6</LINE_ITEM_ID>
            <PRODUCT_ID>
                <bmecat:BUYER_PID type="issue">1806-020</bmecat:BUYER_PID>
                <bmecat:DESCRIPTION_LONG>translation</bmecat:DESCRIPTION_LONG>
            </PRODUCT_ID>
            <QUANTITY>44</QUANTITY>
            <bmecat:ORDER_UNIT>CT</bmecat:ORDER_UNIT>
            <PRODUCT_PRICE_FIX>
                <bmecat:PRICE_AMOUNT>2.35</bmecat:PRICE_AMOUNT>
                <TAX_DETAILS_FIX>
                    <bmecat:TAX_CATEGORY>rate</bmecat:TAX_CATEGORY>
                    <bmecat:TAX_TYPE>VAT</bmecat:TAX_TYPE>
                    <bmecat:TAX>0.00</bmecat:TAX>
                </TAX_DETAILS_FIX>
            </PRODUCT_PRICE_FIX>
            <PRICE_LINE_AMOUNT>103.40</PRICE_LINE_AMOUNT>
                        <bmecat:ACCOUNTING_INFO>
                <bmecat:COST_CATEGORY_ID>623542350350</bmecat:COST_CATEGORY_ID>
            </bmecat:ACCOUNTING_INFO>
            <REMARKS type="Quantity">Pages</REMARKS>
        </INVOICE_ITEM>
    </INVOICE_ITEM_LIST>
    <INVOICE_SUMMARY>
        <TOTAL_ITEM_NUM>6</TOTAL_ITEM_NUM>
        <NET_VALUE_GOODS>452345254.80</NET_VALUE_GOODS>
        <TOTAL_AMOUNT>4452352354.80</TOTAL_AMOUNT>
        <TOTAL_TAX>
            <TAX_DETAILS_FIX/>
        </TOTAL_TAX>
    </INVOICE_SUMMARY>
</INVOICE>

我的 Xsl 代码是

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jss="http://www.elsevier.com/xml/schema/journalStylesheets" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*"/>
    <xsl:output method="html" encoding="UTF-8"/>
    <xsl:template match="/">
        <html>
            <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
                <title>Journal Style Sheet</title>
                <!--<link href="http://elschnappd001:8080/ast/jss/tabs.css" rel="stylesheet" type="text/css"/>-->
                <style type="text/css">.heading{ font-weight:bold; color:black; font-size:100% }    .highlight{ font-weight:bold; color:red; font-size:100% } .head2{ color:MediumVioletRed; background-color:#D0D0D0; } .base_head2{ color:MediumVioletRed; } .head6{ font-variant:small-caps; font-size:120% color: #fff; text-align:left; } .head3{ font-variant:normal; font-size:120% color: #fff; text-align:left; } .head4{ font-style:italic; color:#C00000; text-align:left; } .head5{ font-variant:small-caps; font-weight:bold; color:blue; text-align:centre; } .theader{ font-variant:normal; font-weight:bold; font-size:120% color: #fff; text-align:left; } .lhs-head{ color:brown; font-variant:small-caps; font-weight:bold; } .lhs-thead{ color:#008B8B; font-variant:small-caps; } .lhs{ color:#2F4F4F; } .rhs{ color:#A52A2A; } .rhs_nodata{ color:#FA5858; } .lhsb{ color:brown; font-weight:bold; } .rhsb{ color:green; font-weight:bold; } .tbl1{ color:#808080; } .rhs-wd{ color:red; font-weight:bold; } .rhs-nd{ color:red; font-style:italic; } body{ background-color: #b5baba; font-family:'Cambria'; margin-left:10%; margin-right:10%; }    .customer{  position: absolute; text-decoration: none;  color: #fff;    border: 3px solid transparent;  border-radius: 10px;    background-image: linear-gradient(#42455a,#42455a),radial-gradient(circle at top left,#fd00da,#19d7f8); background-origin: border-box;  background-clip: content-box,border-box;    }   .inlineTable{ display: inline-block;    }       .floatedTable{ float:left;  .table{ float: left;    } .tftable{ float: left;    margin-right: 5%;   width:45%; }                        } table { border-collapse: collapse; border-top: 1px solid lightgrey; border-left: 1px solid lightgrey; empty-cells: show; } tr { border-bottom: 1px solid black; } th, td { border-right: 1px solid black; } th { text-align: left;    }</style>
                <script src="https://code.jquery.com/jquery-3.1.1.js"/>
            </head>
            <body onkeyup="keyDown=0" onkeydown="keyDown=1">
                <div class="content" id="main2">
                    <xsl:apply-templates/>
                </div>
            </body>
        </html>
    </xsl:template>
    <!-- Base Data -->
    <xsl:template match="//INVOICE_HEADER|//INVOICE_SUMMARY"/>
    <xsl:template match="INVOICE/INVOICE_ITEM_LIST" name="main2">
        <table  border="1" width="1100pt" bgcolor="#CCFFCC">
            <tbody>
                <xsl:apply-templates  select="INVOICE_ITEM[1]/descendant::*[not(*)]" mode="row"/>
            </tbody>
        </table>
    </xsl:template>
    <xsl:template match="INVOICE_ITEM//*" mode="row">
        <tr>
            <th bgcolor="#cbf0af">
                <xsl:value-of select="local-name()"/>
            </th>
            <xsl:variable name="pos" select="position()"/>
            <xsl:apply-templates select="ancestor::INVOICE_ITEM_LIST/INVOICE_ITEM/descendant::*[not(*)][$pos]"/>
        </tr>
    </xsl:template>
    <xsl:template match="INVOICE_ITEM//*">
        <td>
            <xsl:value-of select="."/>
        </td>
    </xsl:template>
</xsl:stylesheet>

我希望我的输出如下所示,其中标准标题和值取自下一行中的每个“INVOICE_ITEM”标签。也不想要来自标签“INVOICE_HEADER”和“INVOICE_SUMMARY”的信息 在此处输入图像描述

标签: htmlxmlxslthtml-tablexslt-1.0

解决方案


您将需要一个仅用于标题的模板:

    <xsl:template match="INVOICE_ITEM[1]//*" mode="row">
        <th bgcolor="#cbf0af">
            <xsl:value-of select="local-name()"/>
        </th>
    </xsl:template>

和每个 INVOICE_ITEM 的另一个

    <xsl:template match="INVOICE_ITEM[position()!=1]//*" mode="row">
        <xsl:variable name="pos" select="position()"/>
        <xsl:apply-templates select="ancestor::INVOICE_ITEM_LIST/INVOICE_ITEM/descendant::*[not(*)][$pos]"/>
    </xsl:template>

其中每一个的 <tr> 都放置在它们每个的应用模板之外。


推荐阅读