Note that there are some explanatory texts on larger screens.

plurals
  1. PORemoving elements based on two conditions
    text
    copied!<p>I am new to XSLT and have a problem with removing duplicate entries from the output. </p> <p><strong>The example XML-File:</strong></p> <pre><code>&lt;Datenaustausch&gt; &lt;Meldung&gt; &lt;Anfallstelle&gt; &lt;AS&gt; &lt;ASStamm&gt; &lt;ASNR&gt;009803336&lt;/ASNR&gt; &lt;ASENF&gt;false&lt;/ASENF&gt; &lt;ASInaktiv&gt;false&lt;/ASInaktiv&gt; &lt;/ASStamm&gt; &lt;ASDaten&gt; &lt;ASMeldung&gt; &lt;ASGueltigAb&gt;2003-04-25&lt;/ASGueltigAb&gt; &lt;ASMldData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;8xx&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;/ASMldData&gt; &lt;/ASMeldung&gt; &lt;ASMeldung&gt; &lt;ASGueltigAb&gt;2008-05-15&lt;/ASGueltigAb&gt; &lt;ASMldData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;8xx&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;/ASMldData&gt; &lt;/ASMeldung&gt; &lt;ASMeldung&gt; &lt;ASGueltigAb&gt;2010-08-20&lt;/ASGueltigAb&gt; &lt;ASMldData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;40x&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;8xx&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;/ASMldData&gt; &lt;/ASMeldung&gt; &lt;/ASDaten&gt; &lt;/AS&gt; &lt;AS&gt; &lt;ASStamm&gt; &lt;ASNR&gt;031630116&lt;/ASNR&gt; &lt;ASENF&gt;false&lt;/ASENF&gt; &lt;ASInaktiv&gt;false&lt;/ASInaktiv&gt; &lt;/ASStamm&gt; &lt;ASDaten&gt; &lt;ASMeldung&gt; &lt;ASGueltigAb&gt;2009-04-21&lt;/ASGueltigAb&gt; &lt;ASMldData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;400&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;8xx&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;/ASMldData&gt; &lt;/ASMeldung&gt; &lt;/ASDaten&gt; &lt;/AS&gt; &lt;AS&gt; &lt;ASStamm&gt; &lt;ASNR&gt;040917889&lt;/ASNR&gt; &lt;ASENF&gt;false&lt;/ASENF&gt; &lt;ASInaktiv&gt;false&lt;/ASInaktiv&gt; &lt;/ASStamm&gt; &lt;ASDaten&gt; &lt;ASMeldung&gt; &lt;ASGueltigAb&gt;2007-11-15&lt;/ASGueltigAb&gt; &lt;ASMldData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;400&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;42x&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;8xx&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;/ASMldData&gt; &lt;/ASMeldung&gt; &lt;ASMeldung&gt; &lt;ASGueltigAb&gt;2009-01-19&lt;/ASGueltigAb&gt; &lt;ASMldData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;400&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;42x&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;8xx&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;/ASMldData&gt; &lt;/ASMeldung&gt; &lt;ASMeldung&gt; &lt;ASGueltigAb&gt;2010-06-25&lt;/ASGueltigAb&gt; &lt;ASMldData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;400&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;42x&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;ASLizData&gt; &lt;ASFrk&gt;8xx&lt;/ASFrk&gt; &lt;ASLizGrad&gt;100&lt;/ASLizGrad&gt; &lt;ASAntVerp&gt;100&lt;/ASAntVerp&gt; &lt;/ASLizData&gt; &lt;/ASMldData&gt; &lt;/ASMeldung&gt; &lt;/ASDaten&gt; &lt;/AS&gt; &lt;AS&gt; .... &lt;/AS&gt; &lt;/Anfallstelle&gt; &lt;/Meldung&gt; &lt;/Datenaustausch&gt; </code></pre> <p><code>....</code> represents more orders of same as above</p> <p><strong>I need to get this output:</strong></p> <p>From every 'ASStamm' where the ID is the 'ASNR' I what to remove the duplicate entries ('ASFrk') with the oldest date ('ASGueltigAb').</p> <p>For example the first 'AS' entry should look like this:</p> <pre><code> &lt;tr&gt; &lt;td&gt;009803336&lt;/td&gt; &lt;td&gt;8xx&lt;/td&gt; &lt;td&gt;100&lt;/td&gt; &lt;td&gt;100&lt;/td&gt; &lt;td&gt;2008-05-15&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;009803336&lt;/td&gt; &lt;td&gt;40x&lt;/td&gt; &lt;td&gt;100&lt;/td&gt; &lt;td&gt;100&lt;/td&gt; &lt;td&gt;2010-08-20&lt;/td&gt; &lt;/tr&gt; </code></pre> <p>The duplicate entry (with 'ASFrk' (8xx) and the old date 'ASGueltigAb' (2003-04-25)) was removed.</p> <p>At the moment I use this "solution" to transform the xml to a html table, but without removing the duplicate entries.</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"&gt; &lt;xsl:template match="/"&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;XML&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;table border="1"&gt; &lt;tr&gt; &lt;th&gt;ASNR&lt;/th&gt; &lt;th&gt;ASFrk&lt;/th&gt; &lt;th&gt;ASLizGrad&lt;/th&gt; &lt;th&gt;ASAntVerp&lt;/th&gt; &lt;th&gt;ASGueltigAb&lt;/th&gt; &lt;/tr&gt; &lt;xsl:for-each select="/Datenaustausch/Meldung/Anfallstelle/AS"&gt; &lt;xsl:sort select="ASStamm/ASNR" data-type="number"/&gt; &lt;xsl:for-each select="ASDaten/ASMeldung"&gt; &lt;xsl:sort select="ASMldData/ASLizData/ASFrk" order="descending"/&gt; &lt;xsl:sort select="ASGueltigAb" order="descending" /&gt; &lt;tr&gt; &lt;td&gt; &lt;xsl:value-of select="parent::*/parent::AS/ASStamm/ASNR"/&gt; &lt;/td&gt; &lt;td&gt; &lt;xsl:value-of select="ASMldData/ASLizData/ASFrk"/&gt; &lt;/td&gt; &lt;td&gt; &lt;xsl:value-of select="ASMldData/ASLizData/ASLizGrad"/&gt; &lt;/td&gt; &lt;td&gt; &lt;xsl:value-of select="ASMldData/ASLizData/ASAntVerp"/&gt; &lt;/td&gt; &lt;td&gt; &lt;xsl:value-of select="ASGueltigAb"/&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/xsl:for-each&gt; &lt;/xsl:for-each&gt; &lt;/table&gt; &lt;/body&gt; &lt;/html&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; </code></pre> <p><strong>HTML Output:</strong></p> <p>Example 1: <a href="http://img152.imageshack.us/i/xmlex.jpg/" rel="nofollow">http://img152.imageshack.us/i/xmlex.jpg/</a></p> <p>The marked line should be removed for the 'ASNR'-ID (009803336), for the next example 'ASNR'-ID (040917889) the two marked lines should be removed.</p> <p>Example 2: <a href="http://img710.imageshack.us/i/xmlex2.jpg/" rel="nofollow">http://img710.imageshack.us/i/xmlex2.jpg/</a></p> <p>I think there is a solution with the use of the "Muenchian grouping", but i don´t know how.</p> <p>Can someone please help me to get a solution using XSLT 1.0? </p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload