XSLT 1.0 Duplikate entfernen und mit Ergebnis weiter arbeiten – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self XSLT 1.0 Duplikate entfernen und mit Ergebnis weiter arbeiten Thu, 18 Aug 22 16:29:36 Z https://forum.selfhtml.org/self/2022/aug/18/xslt-1-0-duplikate-entfernen-und-mit-ergebnis-weiter-arbeiten/1801298#m1801298 https://forum.selfhtml.org/self/2022/aug/18/xslt-1-0-duplikate-entfernen-und-mit-ergebnis-weiter-arbeiten/1801298#m1801298 <p>Hallo,</p> <p>stehe wieder vor einer Herausforderung:</p> <p>Es gehört die Vervielfachung von "Headertext.Text" entfernt und das Ergebnis soll anschließend den bestehenden Knoten "Invoice-Header.Remarks" überschreiben.</p> <p>Anschließend soll auch noch der gesamte Knoten "Headertext" entfernt werden.</p> <p>XML:</p> <pre><code class="block"><?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> </code></pre> <p>XSLT:</p> <pre><code class="block"> <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> </code></pre> <p>Korrekt:</p> <pre><code class="block"><?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> </code></pre> <p>LG Julian</p> XSLT 1.0 Duplikate entfernen und mit Ergebnis weiter arbeiten Thu, 18 Aug 22 17:14:24 Z https://forum.selfhtml.org/self/2022/aug/18/xslt-1-0-duplikate-entfernen-und-mit-ergebnis-weiter-arbeiten/1801302#m1801302 https://forum.selfhtml.org/self/2022/aug/18/xslt-1-0-duplikate-entfernen-und-mit-ergebnis-weiter-arbeiten/1801302#m1801302 <p>Hallo Julian,</p> <blockquote> <p>Hallo,</p> <p>stehe wieder vor einer Herausforderung:</p> <p>Es gehört die Vervielfachung von "Headertext.Text" entfernt und das Ergebnis soll anschließend den bestehenden Knoten "Invoice-Header.Remarks" überschreiben.</p> <p>Anschließend soll auch noch der gesamte Knoten "Headertext" entfernt werden.</p> </blockquote> <p>Um den mehrfachen Text nur 1x auszugeben, reicht der Zugriff auf das erste Vorkommen, dann direkt als Inhalt von Remarks ausgeben.</p> <p>Das zweite redundante Identity-Template kann übrigens weg, also ergänze:</p> <pre><code class="block language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">xsl:</span>template</span> <span class="token attr-name">match</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Remarks<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>Remark</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">xsl:</span>value-of</span> <span class="token attr-name">select</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>normalize-space(//Headertext[1]/Text)<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>Remark</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">xsl:</span>template</span><span class="token punctuation">></span></span> </code></pre> <p>Grüße,<br> Thomas</p> XSLT 1.0 Duplikate entfernen und mit Ergebnis weiter arbeiten Thu, 18 Aug 22 17:21:42 Z https://forum.selfhtml.org/self/2022/aug/18/xslt-1-0-duplikate-entfernen-und-mit-ergebnis-weiter-arbeiten/1801303#m1801303 https://forum.selfhtml.org/self/2022/aug/18/xslt-1-0-duplikate-entfernen-und-mit-ergebnis-weiter-arbeiten/1801303#m1801303 <p>Natürlich ist <code><Remarks>…</Remarks></code> gemeint.</p> XSLT 1.0 Duplikate entfernen und mit Ergebnis weiter arbeiten Thu, 18 Aug 22 17:32:12 Z https://forum.selfhtml.org/self/2022/aug/18/xslt-1-0-duplikate-entfernen-und-mit-ergebnis-weiter-arbeiten/1801304#m1801304 https://forum.selfhtml.org/self/2022/aug/18/xslt-1-0-duplikate-entfernen-und-mit-ergebnis-weiter-arbeiten/1801304#m1801304 <p>Danke schon mal, aber das Ergebnis ist nicht vollständig:</p> <p><Remarks>Skonto 1,5% - termin płatności 21 dni</Remarks>"</p> <p>Korrekt sollte sein:</p> <p><Remarks>Skonto 1,5% - termin płatności 21 dni e-faktura: efaktury@onninen.pl test4</Remarks></p> <p>Das Segment "Headertext.Text" beinhaltet mehrere unterschiedliche Texte.</p> <p>Und im Anschluss sollte das Segment "Headertext" komplett entfernt werden.</p> <p>LG Julian</p> XSLT 1.0 Duplikate entfernen und mit Ergebnis weiter arbeiten Thu, 18 Aug 22 17:38:21 Z https://forum.selfhtml.org/self/2022/aug/18/xslt-1-0-duplikate-entfernen-und-mit-ergebnis-weiter-arbeiten/1801305#m1801305 https://forum.selfhtml.org/self/2022/aug/18/xslt-1-0-duplikate-entfernen-und-mit-ergebnis-weiter-arbeiten/1801305#m1801305 <blockquote> <p>Danke schon mal, aber das Ergebnis ist nicht vollständig:</p> <p><Remarks>Skonto 1,5% - termin płatności 21 dni</Remarks>"</p> <p>Korrekt sollte sein:</p> <p><Remarks>Skonto 1,5% - termin płatności 21 dni e-faktura: efaktury@onninen.pl test4</Remarks></p> </blockquote> <p>Auch gerade gesehen:</p> <pre><code class="block language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">xsl:</span>template</span> <span class="token attr-name">match</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Remarks<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>Remarks</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span><span class="token namespace">xsl:</span>value-of</span> <span class="token attr-name">select</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>concat(normalize-space(//Headertext[1]/Text), ' ', normalize-space(//Headertext[2]/Text), ' ', normalize-space(//Headertext[3]/Text))<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>Remarks</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span><span class="token namespace">xsl:</span>template</span><span class="token punctuation">></span></span> </code></pre> <p>Headertext kommt wegen dem leereen Template dafür gar nicht mehr vor.</p> <p>Grüße,<br> Thomas</p> XSLT 1.0 Duplikate entfernen und mit Ergebnis weiter arbeiten Thu, 18 Aug 22 17:42:56 Z https://forum.selfhtml.org/self/2022/aug/18/xslt-1-0-duplikate-entfernen-und-mit-ergebnis-weiter-arbeiten/1801306#m1801306 https://forum.selfhtml.org/self/2022/aug/18/xslt-1-0-duplikate-entfernen-und-mit-ergebnis-weiter-arbeiten/1801306#m1801306 <p>thx, super super super!!! :)</p> <p>musste nur noch folg. ergänzen:</p> <p><!--delete Headertext node--> <xsl:template match="Headertext" /</p>