html - 使用 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”的信息
解决方案
您将需要一个仅用于标题的模板:
<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> 都放置在它们每个的应用模板之外。
推荐阅读
- php - {*or*} 的正则表达式(Laravel 5.7 升级的 PhpStorm)
- java - avd 打开主页但没有在 android studio 中显示我的应用
- r - 使用 ggplot2 从列表中绘制数据
- python-3.x - ValueError:在 LightGBM 中检测到圆形参考
- javascript - 无法使用全局或局部变量访问输入值
- ionic4 - 如何使用 CLI 生成 Stencil+Ionic4 PWA 组件
- java - RecyclerView - 获取选定的位置并将该位置传递给另一个活动,其中将显示相同的列表并选择该特定项目
- javascript - 在下拉列表中提交初始选择
- python - 为什么在尝试将文件分配给 Model.form 时出现属性错误??)
- python - 在这种情况下,可以将 itertools 用于未指定数量的维度吗?