2017-01-02 49 views
-1

我输入添加总量并把它添加到一个新的标签

<Invoice> 
    <Invoice_Details> 
    <Consolidated_Invoice_ID>1</Consolidated_Invoice_ID> 
    <Line>1</Line> 
    <Gross_Invoice_Amount>1110</Gross_Invoice_Amount> 
    </Invoice_Details> 
    <Invoice_Details> 
    <Consolidated_Invoice_ID>1</Consolidated_Invoice_ID> 
    <Line>2</Line> 
    <Gross_Invoice_Amount>1110</Gross_Invoice_Amount> 
    </Invoice_Details> 
    <Invoice_Details> 
    <Consolidated_Invoice_ID>2</Consolidated_Invoice_ID> 
    <Line>1</Line> 
    <Gross_Invoice_Amount>2220</Gross_Invoice_Amount> 
    </Invoice_Details> 
    <Invoice_Details> 
    <Consolidated_Invoice_ID>2</Consolidated_Invoice_ID> 
    <Line>2</Line> 
    <Gross_Invoice_Amount>2220</Gross_Invoice_Amount> 
    </Invoice_Details> 
    </Invoice> 

我想要的格式的输出中:

<Invoice> 
    <Invoice_Details> 
    <Consolidated_Invoice_ID>1</Consolidated_Invoice_ID> 
    <Line>1</Line> 
    <Gross_Invoice_Amount>1110</Gross_Invoice_Amount> 
    </Invoice_Details> 
    <Invoice_Details> 
    <Consolidated_Invoice_ID>1</Consolidated_Invoice_ID> 
    <Line>2</Line> 
    <Gross_Invoice_Amount>1110</Gross_Invoice_Amount> 
    </Invoice_Details> 
    <Invoice_Details> 
    <Consolidated_Invoice_ID>1</Consolidated_Invoice_ID> 
    <Line>3</Line> 
    <Gross_Invoice_Amount>22220</Gross_Invoice_Amount> 
    </Invoice_Details> 
    <Invoice_Details> 
    <Consolidated_Invoice_ID>2</Consolidated_Invoice_ID> 
    <Line>1</Line> 
    <Gross_Invoice_Amount>2220</Gross_Invoice_Amount> 
    </Invoice_Details> 
    <Invoice_Details> 
    <Consolidated_Invoice_ID>2</Consolidated_Invoice_ID> 
    <Line>2</Line> 
    <Gross_Invoice_Amount>2220</Gross_Invoice_Amount> 
    </Invoice_Details> 
    <Invoice_Details> 
    <Consolidated_Invoice_ID>2</Consolidated_Invoice_ID> 
    <Line>3</Line> 
    <Gross_Invoice_Amount>4440</Gross_Invoice_Amount> 
    </Invoice_Details> 
    </Invoice> 

发票ID的值和行值将被创建为添加所有相同ID的总数的新元素。

条件: 只有在任何可用的id中至少有一个毛重值时,才需要毛值。如果没有毛值可用,则不需要。

+0

请加任何XSLT的1.0标签或XSLT的2.0并详细说明您正在使用的XSLT版本。 – Madeyedexter

+0

Soa接受这两个版本..感谢 –

回答

0

这里是一个XSLT 1.0解决方案:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="xml" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> 

<xsl:key name="invoices" match="Invoice/Invoice_Details" use="Consolidated_Invoice_ID"/> 
    <xsl:template match="/"> 
     <Invoice> 
     <xsl:for-each select="Invoice/Invoice_Details[count(.|key('invoices',Consolidated_Invoice_ID)[1])=1]"> 
      <xsl:variable name="details" select="key('invoices',Consolidated_Invoice_ID)"/> 
      <xsl:copy-of select="$details"/> 
      <!--Add a new record with gross amount and total--> 
      <Consolidated_Invoice_ID> 
      <xsl:value-of select="Consolidated_Invoice_ID"/> 
      </Consolidated_Invoice_ID> 
      <Line> 
      <xsl:value-of select="count($details)+1"/> 
      </Line> 
      <Gross_Invoice_Amount> 
      <xsl:value-of select="sum($details/Gross_Invoice_Amount)"/> 
      </Gross_Invoice_Amount> 
     </xsl:for-each> 
     </Invoice> 
    </xsl:template> 
</xsl:transform> 
+0

这是一个工作转换:http://xsltransform.net/jz1PuPw – Madeyedexter