Je cherche de l'aide. J'ai un formulaire XFA (basé sur XML) avec une liste déroulante, qui contient un affichage et enregistre la valeur par élément. Comme la liste peut être très longue, j'essaie de la filtrer en utilisant XSLT 1.0.Comment filtrer deux arbres xml à la fois en utilisant XSLT 1.0?
Le XML source drom le menu déroulant peut ressembler à ceci:
<?xml version="1.0" encoding="UTF-8"?>
<field name="DropDownList" xmlns="http://www.xfa.org/schema/xfa-form/2.8/">
<!-- Displayed items to be filtered -->
<items xmlns="http://www.xfa.org/schema/xfa-template/3.6/">
<text>Lorem Ipsum 0030</text>
<text>Lorem Ipsum 0060</text>
<text>Lorem Ipsum 0070</text>
<text>Lorem Ipsum 0080</text>
<text>Lorem Ipsum 0100</text>
<text>Lorem Ipsum 0110</text>
<text>Lorem Ipsum 0120</text>
<text>Lorem Ipsum 0130</text>
<text>Lorem Ipsum 0140</text>
</items>
<!-- Hidden save items to be filtered too -->
<items save="1" presence="hidden" xmlns="http://www.xfa.org/schema/xfa-template/3.6/">
<text>item0</text>
<text>item1</text>
<text>item2</text>
<text>item3</text>
<text>item4</text>
<text>item5</text>
<text>item6</text>
<text>item7</text>
<text>item8</text>
<text>item9</text>
</items>
</field>
Mon style actuel semble ainsi:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xfa="http://www.xfa.org/schema/xfa-form/2.8/" xml:space="preserve">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no" standalone="yes"/>
<xsl:template match="/">
<field name="DropDownList">
<xsl:apply-templates/>
</field>
</xsl:template>
<xsl:template match="/*[local-name()='field']/*[local-name()='items']" >
<items xmlns="http://www.xfa.org/schema/xfa-template/3.6/">
<xsl:for-each select="./*[local-name()='text']">
<xsl:if test="contains(., '01')">
<text>
<xsl:value-of select="."/>
</text>
</xsl:if>
</xsl:for-each>
</items>
</xsl:template>
</xsl:stylesheet>
Ce que je besoin est la même structure XML comme avant de le charger en arrière dans la liste déroulante, mais je n'ai pas encore trouvé un moyen d'obtenir le deuxième arbre d'éléments rempli avec les données correctes. Je pense utiliser un paramètre ou une variable pour sauvegarder l'index d'un nœud dans le premier arbre des items et trouver le nœud correspondant dans le second arbre des items, mais comment?
<?xml version="1.0" encoding="UTF-8"?>
<field name="DropDownList" xmlns="http://www.xfa.org/schema/xfa-form/2.8/">
<items xmlns="http://www.xfa.org/schema/xfa-template/3.6/">
<text>Lorem Ipsum 0100</text>
<text>Lorem Ipsum 0110</text>
<text>Lorem Ipsum 0120</text>
<text>Lorem Ipsum 0130</text>
<text>Lorem Ipsum 0140</text>
</items>
<items save="1" presence="hidden" xmlns="http://www.xfa.org/schema/xfa-template/3.6/">
<text>item5</text>
<text>item6</text>
<text>item7</text>
<text>item8</text>
<text>item9</text>
</items>
</field>