je l'entrée suivante:template match XSLT valeur clé
<root>
<output>
<queries>
<query name="name1">
<parameters>
<parameter name="id_contact">8947</parameter>
</parameters>
<queryResults/>
</query>
<query name="name1">
<parameters>
<parameter name="id_contact">8943</parameter>
</parameters>
<queryResults>
<record id="1">
<column name="id_task">16422</column>
<column name="id_contact">8943</column>
</record>
</queryResults>
</query>
<query name="name1">
<parameters>
<parameter name="id_contact">1571</parameter>
</parameters>
<queryResults/>
</query>
</queries>
</output>
<output2>
<output_getquerydata>
<data>
<query name="name2">
<parameters>
<parameter name="id">1</parameter>
</parameters>
<queryResults>
<record id="1">
<column name="id_task">14016</column>
<column name="id_contact">8947</column>
</record>
<record id="2">
<column name="id_task">14012</column>
<column name="id_contact">8943</column>
</record>
<record id="3">
<column name="id_task">8826</column>
<column name="id_contact">1571</column>
</record>
</queryResults>
</query>
<output_getquerydata>
<queries>
<query name="name3">
<parameters>
<parameter name="id_task">14016</parameter>
</parameters>
<queryResults>
<record id="1">
<column name="id_shift">2989</column>
</record>
</queryResults>
</query>
<query name="name3">
<parameters>
<parameter name="id_task">14012</parameter>
</parameters>
<queryResults/>
</query>
<query name="name3">
<parameters>
<parameter name="id_task">8826</parameter>
</parameters>
<queryResults/>
</query>
</queries>
</output_getquerydata>
</data>
</output_getquerydata>
</output2>
</root>
Mon XSL:
<xsl:strip-space elements="*"/>
<xsl:key name="k" match="output/queries/query/queryResults/record" use="column[@name='id_contact']"/>
<xsl:key name="ok" match="output2/output_getquerydata/data/query/queryResults/record" use="column[@name='id_task']"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- suppress the first output branch -->
<xsl:template match="output"/>
<!-- suppress records that have a matching entry in the other branch -->
<xsl:template match="record[key('k', column[@name='id_contact'])]"/>
<xsl:template match="parameters[not(key('ok', ./parameter))]"/>
L'objectif est pour chaque 'query1' qui a queryResults/enregistrement, je prends la valeur de que queryResults/record/column [@ name = 'id_contact'] et supprime chaque enregistrement de "query2" ayant cette valeur dans query2/queryResults/record/column [@ name = 'id_contact']. Cette partie fonctionne, mais la partie suivante ne fonctionne pas comme il se doit: Puis, après que les valeurs de query2 ont été supprimées, prenez les valeurs restantes query2/id_task et conservez la requête [name3] qui a la même valeur dans id_task.
Production Désirée:
<root>
<output2>
<output_getquerydata>
<data>
<query name="name2">
<parameters>
<parameter name="id">1</parameter>
</parameters>
<queryResults>
<record id="1">
<column name="id_task">14016</column>
<column name="id_contact">8947</column>
</record>
<!--record no.22 deleted, because id_contact=8943 is a match in query1-->
<record id="3">
<column name="id_task">8826</column>
<column name="id_contact">1571</column>
</record>
</queryResults>
</query>
<output_getquerydata>
<queries>
<query name="name3">
<parameters>
<parameter name="id_task">14016</parameter>
</parameters>
<queryResults>
<record id="1">
<column name="id_shift">2989</column>
</record>
</queryResults>
</query>
<!--2nd query name3 deleted, because id_task=14012 is not a match in remaining query2 values-->
<query name="name3">
<parameters>
<parameter name="id_task">8826</parameter>
</parameters>
<queryResults/>
</query>
</queries>
</output_getquerydata>
</data>
</output_getquerydata>
</output2>
</root>
Qu'est-ce que je fais mal? Merci