Ich versuche, einen Bericht aus einer AWS-Zuordnungsdatei zu generieren. Ich habe die entsprechenden Daten von der CSV in XML konvertiert, kann aber nicht genau herausfinden, wie die Schlüssel/Gruppierung in XSLT 1.0 (.net) zu tun ist.XSLT 1.0 Multi-Level-Gruppierung mit Schlüsseln
Dies ist die XML-Datei.
<?xml version="1.0" encoding="utf-16"?>
<AWS>
<BusinessUnit>
<Name>BBII Western</Name>
<Office>
<Name>Fairfield</Name>
<Job>
<JobNumber>OH4299</JobNumber>
<Phase> 35</Phase>
<CostCode> 74500</CostCode>
<Costs>
<Cost>
<ProductName>AWS Storage Gateway</ProductName>
<UsageQuantity>558.6793022</UsageQuantity>
<TotalCost>16.760536</TotalCost>
</Cost>
<Cost>
<ProductName>AWS Storage Gateway</ProductName>
<UsageQuantity>0.99999986</UsageQuantity>
<TotalCost>124.999981</TotalCost>
</Cost>
</Costs>
</Job>
</Office>
<Office>
<Name>Riconanda</Name>
<Job>
<JobNumber>4228</JobNumber>
<Phase> 92</Phase>
<CostCode> 92110</CostCode>
<Costs>
<Cost>
<ProductName>AWS Storage Gateway</ProductName>
<UsageQuantity>63.92940319</UsageQuantity>
<TotalCost>1.9179</TotalCost>
</Cost>
<Cost>
<ProductName>AWS Storage Gateway</ProductName>
<UsageQuantity>0.99999986</UsageQuantity>
<TotalCost>124.999981</TotalCost>
</Cost>
</Costs>
</Job>
</Office>
</BusinessUnit>
<BusinessUnit>
<Name>None</Name>
<Office>
<Name>None</Name>
<Job>
<JobNumber>None</JobNumber>
<Phase> </Phase>
<CostCode> </CostCode>
<Costs>
<Cost>
<ProductName>AWS Storage Gateway</ProductName>
<UsageQuantity>0.33271862</UsageQuantity>
<TotalCost>0.009982</TotalCost>
</Cost>
<Cost>
<ProductName>Amazon Elastic Compute Cloud</ProductName>
<UsageQuantity>1929.089098</UsageQuantity>
<TotalCost>183.26</TotalCost>
</Cost>
<Cost>
<ProductName>Amazon Elastic Compute Cloud</ProductName>
<UsageQuantity>4.99999976</UsageQuantity>
<TotalCost>0.5</TotalCost>
</Cost>
</Costs>
</Job>
</Office>
</BusinessUnit>
<BusinessUnit>
<Name>BBII Alternative Delivery</Name>
<Office>
<Name>Denver-Heery</Name>
<Job>
<JobNumber>199900</JobNumber>
<Phase> 16</Phase>
<CostCode> 74500</CostCode>
<Costs>
<Cost>
<ProductName>AWS Storage Gateway</ProductName>
<UsageQuantity>131.2051444</UsageQuantity>
<TotalCost>3.936191</TotalCost>
</Cost>
<Cost>
<ProductName>AWS Storage Gateway</ProductName>
<UsageQuantity>1.00000017</UsageQuantity>
<TotalCost>125.000019</TotalCost>
</Cost>
</Costs>
</Job>
</Office>
</BusinessUnit>
<BusinessUnit>
<Name>Transit</Name>
<Office>
<Name>Denver Estimating</Name>
<Job>
<JobNumber>RAILOH</JobNumber>
<Phase> N/A</Phase>
<CostCode> 74500</CostCode>
<Costs>
<Cost>
<ProductName>AWS Storage Gateway</ProductName>
<UsageQuantity>758.8392434</UsageQuantity>
<TotalCost>22.765391</TotalCost>
</Cost>
<Cost>
<ProductName>AWS Storage Gateway</ProductName>
<UsageQuantity>1.00000017</UsageQuantity>
<TotalCost>125.000019</TotalCost>
</Cost>
</Costs>
</Job>
</Office>
</BusinessUnit>
</AWS>
Was ich tun möchte, ist der 1. auf der Ebene Business Unit ich die Summe von UsageQuantity und Totalcost für jeden Product wollen.
Dann machen Sie das gleiche für jedes Büro und Job. Job wird nicht schwer sein und erfordert keine Gruppierung.
Ich gebe dies in HTML aus.
Für BusinessUnit habe ich mehrere wichtige Konfigurationen ausprobiert und keiner scheint zu funktionieren, wie ich erwartet hatte.
I (Businessunit Ebene nur) versucht:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="html" indent="yes"/>
<xsl:key name="BU_Product"
match="BusinessUnit"
use="concat(Name, '#', Office/Job/Costs/Cost/ProductName)"/>
<xsl:template match="AWS">
<html>
<head>
<style>
table {
font-family: Verdana;
font-size: 9pt;
border-collapse: collapse;
table-layout: fixed
}
th {
background-color: light-blue;
font-weight: bold;
border: 1px solid black;
}
th.columnHeader {
text-align: center
}
th.rowHeader {
text-align: right;
padding-right: 4px;
}
td {
border: 1px solid black;
}
td.num {
text-align: right;
paddin-right:4px;
}
</style>
</head>
<body>
<xsl:apply-templates select="BusinessUnit"/>
</body>
</html>
</xsl:template>
<xsl:template match="BusinessUnit">
<table>
<tr>
<th class="columnHeader">
Business Unit:
</th>
<td colspan="2">
<xsl:value-of select="Name"/>
</td>
</tr>
<tr>
<th class="columnHeader">Product</th>
<th class="columnHeader">Usage Qty</th>
<th class="columnHeader">Cost</th>
</tr>
<xsl:for-each select="Office/Job/Costs/Cost[count(. | key('BU_Product',concat(Name, '#', Office/Job/Costs/Cost/ProductName))[1]) = 1]">
<tr>
<th class="rowHeader">
<xsl:value-of select="ProductName"/>
</th>
<td class="num">
<xsl:value-of select="format-number(sum(UsageQuantity),'##,##0.00')"/>
</td>
<td class="num">
<xsl:value-of select="format-number(sum(TotalCost), '##,##0.00')"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Welche dies erzeugt:
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
table {
font-family: Verdana;
font-size: 9pt;
border-collapse: collapse;
table-layout: fixed
}
th {
background-color: light-blue;
font-weight: bold;
border: 1px solid black;
}
th.columnHeader {
text-align: center
}
th.rowHeader {
text-align: right;
padding-right: 4px;
}
td {
border: 1px solid black;
}
td.num {
text-align: right;
paddin-right:4px;
}
</style>
</head>
<body>
<table>
<tr>
<th class="columnHeader">
Business Unit:
</th>
<td colspan="2">BBII Western</td>
</tr>
<tr>
<th class="columnHeader">Product</th>
<th class="columnHeader">Usage Qty</th>
<th class="columnHeader">Cost</th>
</tr>
<tr>
<th class="rowHeader">AWS Storage Gateway</th>
<td class="num">558.68</td>
<td class="num">16.76</td>
</tr>
<tr>
<th class="rowHeader">AWS Storage Gateway</th>
<td class="num">1.00</td>
<td class="num">125.00</td>
</tr>
<tr>
<th class="rowHeader">AWS Storage Gateway</th>
<td class="num">63.93</td>
<td class="num">1.92</td>
</tr>
<tr>
<th class="rowHeader">AWS Storage Gateway</th>
<td class="num">1.00</td>
<td class="num">125.00</td>
</tr>
</table>
<table>
<tr>
<th class="columnHeader">
Business Unit:
</th>
<td colspan="2">None</td>
</tr>
<tr>
<th class="columnHeader">Product</th>
<th class="columnHeader">Usage Qty</th>
<th class="columnHeader">Cost</th>
</tr>
<tr>
<th class="rowHeader">AWS Storage Gateway</th>
<td class="num">0.33</td>
<td class="num">0.01</td>
</tr>
<tr>
<th class="rowHeader">Amazon Elastic Compute Cloud</th>
<td class="num">1,929.09</td>
<td class="num">183.26</td>
</tr>
<tr>
<th class="rowHeader">Amazon Elastic Compute Cloud</th>
<td class="num">5.00</td>
<td class="num">0.50</td>
</tr>
</table>
<table>
<tr>
<th class="columnHeader">
Business Unit:
</th>
<td colspan="2">BBII Alternative Delivery</td>
</tr>
<tr>
<th class="columnHeader">Product</th>
<th class="columnHeader">Usage Qty</th>
<th class="columnHeader">Cost</th>
</tr>
<tr>
<th class="rowHeader">AWS Storage Gateway</th>
<td class="num">131.21</td>
<td class="num">3.94</td>
</tr>
<tr>
<th class="rowHeader">AWS Storage Gateway</th>
<td class="num">1.00</td>
<td class="num">125.00</td>
</tr>
</table>
<table>
<tr>
<th class="columnHeader">
Business Unit:
</th>
<td colspan="2">Transit</td>
</tr>
<tr>
<th class="columnHeader">Product</th>
<th class="columnHeader">Usage Qty</th>
<th class="columnHeader">Cost</th>
</tr>
<tr>
<th class="rowHeader">AWS Storage Gateway</th>
<td class="num">758.84</td>
<td class="num">22.77</td>
</tr>
<tr>
<th class="rowHeader">AWS Storage Gateway</th>
<td class="num">1.00</td>
<td class="num">125.00</td>
</tr>
</table>
</body>
</html>
Nicht ganz das, was ich want.The Identische Product Summe sollte zusammen.