<Main> <Payload id="A1"> <Data> <row> <Qty>10</Qty> <Date>10-11-2021</Date> </row> </Data> </Payload> <Payload id="A2"> <Data> <row> <Qty>10</Qty> <Date>10-11-2021</Date> </row> <row> <Qty>20</Qty> <Date>10-11-2021</Date> </row> </Data> </Payload></Main>
<?xml version="1.0" encoding="UTF-8" ?><xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="/"> <xsl:for-each select="/Main/Payload[@id='A2']/Data/row"> <Unique> <Qty><xsl:value-of select="Qty"/></Qty> <Qty><xsl:value-of select="Date"/></Qty> </Unique> </xsl:for-each> </xsl:template></xsl:transform>
/Main/Payload[@id='A2']/Data/row/Qty[. != /Main/Payload[@id='A1']/Data/row/Qty]
To se nedělá pomocí cyklu ale pomocí podmínky […]. To vaše zadání není úplně podrobné, ale ten XPath výraz může být třeba nějak takto:Kód: [Vybrat]/Main/Payload[@id='A2']/Data/row/Qty[. != /Main/Payload[@id='A1']/Data/row/Qty]
<?xml version="1.0" encoding="UTF-8"?><Main> <Payload id="A1"> <Data> <row> <Qty>10</Qty> <Date>10-11-2021</Date> </row> <row> <Qty>20</Qty> <Date>10-11-2021</Date> </row> </Data> </Payload> <Payload id="A2"> <Data> <row> <Qty>10</Qty> <Date>10-11-2021</Date> </row> <row> <Qty>20</Qty> <Date>10-11-2021</Date> </row> <row> <Qty>30</Qty> <Date>10-12-2021</Date> </row> </Data> </Payload></Main>
<?xml version="1.0" encoding="UTF-8" ?><xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="/"> <xsl:for-each select="/Main/Payload[@id='A2']/Data/row"> <xsl:if test="Qty[. != /Main/Payload[@id='A1']/Data/row/Qty]"> <Unique> <Qty><xsl:value-of select="Qty"/></Qty> <Date><xsl:value-of select="Date"/></Date> </Unique> </xsl:if> </xsl:for-each> </xsl:template></xsl:transform>
/Main/Payload[@id='A2']/Data/row/Qty[not(. = /Main/Payload[@id='A1']/Data/row/Qty)]
Takhle, vždycky zapomenu, jak se chovají negace spolu se sekvencemi:Kód: [Vybrat]/Main/Payload[@id='A2']/Data/row/Qty[not(. = /Main/Payload[@id='A1']/Data/row/Qty)]
Má to být tak, že za duplicitu se považuje, když je stejné Qty a Date, nebo je duplicita, když je stejná alespoň jedna ze dvou hodnot?
<xsl:template match="/Main/Payload[@id = 'A2']/Data/row"> <xsl:variable name="row" select="."/> <xsl:if test="count(/Main/Payload[@id = 'A1']/Data/row[Qty = $row/Qty and Date = $row/Date]) = 0"> <Unique> <xsl:copy-of select="$row/Qty"/> <xsl:copy-of select="$row/Date"/> </Unique> </xsl:if> </xsl:template>