Hallo,
stehe wieder vor einer Herausforderung:
Es gehört die Vervielfachung von "Headertext.Text" entfernt und das Ergebnis soll anschließend den bestehenden Knoten "Invoice-Header.Remarks" überschreiben.
Anschließend soll auch noch der gesamte Knoten "Headertext" entfernt werden.
XML:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Document-Invoice>
<Invoice-Header>
<InvoiceNumber>test</InvoiceNumber>
<Remarks>1</Remarks>
</Invoice-Header>
<Headertext>
<Text>
Skonto 1,5% - termin płatności 21 dni</Text>
</Headertext>
<Headertext>
<Text>e-faktura: efaktury@onninen.pl</Text>
</Headertext>
<Headertext>
<Text>test4</Text>
</Headertext>
<Headertext>
<Text>
Skonto 1,5% - termin płatności 21 dni</Text>
</Headertext>
<Headertext>
<Text>e-faktura: efaktury@onninen.pl</Text>
</Headertext>
<Headertext>
<Text>test4</Text>
</Headertext>
<Headertext>
<Text>
Skonto 1,5% - termin płatności 21 dni</Text>
</Headertext>
<Headertext>
<Text>e-faktura: efaktury@onninen.pl</Text>
</Headertext>
<Headertext>
<Text>test4</Text>
</Headertext>
<Headertext>
<Text>
Skonto 1,5% - termin płatności 21 dni</Text>
</Headertext>
<Headertext>
<Text>e-faktura: efaktury@onninen.pl</Text>
</Headertext>
<Headertext>
<Text>test4</Text>
</Headertext>
<Headertext>
<Text>
Skonto 1,5% - termin płatności 21 dni</Text>
</Headertext>
<Headertext>
<Text>e-faktura: efaktury@onninen.pl</Text>
</Headertext>
<Headertext>
<Text>test4</Text>
</Headertext>
<Headertext>
<Text>
Skonto 1,5% - termin płatności 21 dni</Text>
</Headertext>
<Headertext>
<Text>e-faktura: efaktury@onninen.pl</Text>
</Headertext>
<Headertext>
<Text>test4</Text>
</Headertext>
<Invoice-Parties>
<Buyer>
<ILN>123456</ILN>
</Buyer>
<Payer />
</Invoice-Parties>
</Document-Invoice>
XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl=http://www.w3.org/1999/XSL/Transform
xmlns:exsl=http://exslt.org/common extension-element-prefixes="exsl">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:strip-space elements="*" />
<xsl:key name="header_text" match="Headertext" use="Text"/>
<xsl:template match="Headertext[generate-id() != generate-id(key('header_text', Text)[1])]" />
<!-- Identity-Template für die nicht explizit benannten Elemente -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Invoice-Header/Remarks">
<Remarks>
<xsl:for-each select="//Headertext[generate-id() != generate-id(key('header_text', Text)[1])]">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
</Remarks>
</xsl:template>
<!-- delete empty nodes -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(@*|*|comment()|processing-instruction()) and normalize-space()='']"/>
</xsl:stylesheet>
Korrekt:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Document-Invoice>
<Invoice-Header>
<InvoiceNumber>test</InvoiceNumber>
<Remarks>Skonto 1,5% - termin płatności 21 dni e-faktura: efaktury@onninen.pl test4</Remarks>
</Invoice-Header>
<Invoice-Parties>
<Buyer>
<ILN>123456</ILN>
</Buyer>
<Payer />
</Invoice-Parties>
</Document-Invoice>
LG Julian