Lorsque XSLT pour-chacun est dans une boucle. Comment puis-je ajouter un attribut ou d'un nœud XML basé sur d'autres valeurs XML. À L'AIDE DE XSLT
Quelqu'un peut-il m'aider à régler ce problème?
J'ai un fichier XML et de filtrage de l'valeurs basée sur une condition. Le stockage de l'filtré xml dans une variable. Alors que le filtrage de l'état, je suis en train d'ajouter un attribut ou d'un nœud à l'filtré xml, mais il ne fonctionne pas pour moi..
XML d'entrée:
<root>
<a id="13">
<b>XXX1</b>
<c>YYY1</c>
</a>
<a id="2">
<b>XXX2</b>
<c>YYY2</c>
</a>
<a id="15">
<b>XXX3</b>
<c>YYY3</c>
</a>
<a id="37">
<b>XXX4</b>
<c>YYY4</c>
</a>
<a id="51">
<b>XXX5</b>
<c>YYY5</c>
</a>
</root>
Un autre XML, qui est stocké dans une variable appelée "data" (c'est pour le filtrage):
<sample>
<con id="37" order="1"/>
<con id="13" order="2"/>
<con id="51" order="3"/>
<con id="2" order="4"/>
<con id="15" order="5"/>
</sample>
À l'aide de XSLT, je suis en train de filtre & ajouter un élément de cette façon.
<xsl:variable name="filteredData">
<newroot>
<xsl:for-each select="/root/a[@id > 14]">
<xsl:if test="msxsl:node-set($data)/sample/con[@id = current()/@id]/@id = current()/@id">
<xsl:element name="order">
<xsl:value-of select="msxsl:node-set($data)/sample/con[@id = current()/@id]/@order"/>
</xsl:element>
</xsl:if>
</xsl:for-each>
</newroot>
</xsl:variable>
XML en SORTIE (c'est à dire, "filteredData" variable doit contenir code XML ci-dessous):
<newroot>
<a id="15">
<b>XXX3</b>
<c>YYY3</c>
<order>5</order>
</a>
<a id="37">
<b>XXX4</b>
<c>YYY4</c>
<order>1</order>
</a>
<a id="51">
<b>XXX5</b>
<c>YYY5</c>
<order>3</order>
</a>
</newroot>
OriginalL'auteur Siva Charan | 2011-04-25
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser une table de recherche avec la touche de fonction comme dans cet exemple Astuce: XSLT Table de Recherche
J'ai été en mesure d'obtenir le fragment de code suivant pour produire un document xml qui correspondent à vos sortie ci-dessus. Le filtrage des données dans le xslt ci-dessous a été chargé à partir d'un document distinct, mais il devrait être facile de s'adapter.
Ravi de vous aider. Vous devez accepter la réponse en cliquant sur la coche il a répondu à votre question et peut-être même "droit de vote" à l'aide de la flèche si votre vraiment heureux.
Oui, je vais le faire.
Ce ne filtre pas
a
éléments surcon/@id
comme dans la question, se terminant avec posible videorder
éléments. Dans cette situation, il est préférable de traverser le filtre (qui est plus court) plus rares que les données.OriginalL'auteur bstoney
Basé sur les intrants, maintenant, j'ai essayé & a mis en œuvre avec une autre forme de représentation.
Nouveau Code XSLT:
OriginalL'auteur Siva Charan