J'ai créé une feuille de style censée copier de manière sélective le contenu d'un document XML afin de pouvoir supprimer les données dont nous n'avons pas besoin. J'ai fourni 2 exemples ci-dessous et la feuille de style que nous utilisons actuellement pour le faire. La feuille de style fonctionne, mais je pense qu'il y a probablement une meilleure façon de le faire parce que dans la version actuelle, je vérifie la même chose dans deux endroits différents (author = 'John Doe').XSLT plus performant - Inclusion sélective dans la sortie
Les règles pour inclure un élément XML dans la sortie est la suivante:
- S'il y a un élément de bloc-notes dans les blocs-notes qui contient le texte de l'auteur égal à « John Doe » comprennent alors l'élément de blocs-notes dans la
- Si l'élément notepad a un élément author avec un texte égal à 'John Doe', incluez tous les éléments dans l'élément notepad dans la sortie xml.
Entrée Exemple # 1
<transaction>
<policy>
<insco>CC</insco>
<notepads>
<notepad>
<author>Andy</author>
<notepad>
<notepad>
<author>John Doe</author>
<notepad>
<notepad>
<author>Barney</author>
<notepad>
</notepads>
</policy>
</transaction>
Résultat escompté pour l'entrée # 1
<transaction>
<policy>
<insco>CC</insco>
<notepads>
<notepad>
<author>John Doe</author>
<notepad>
</notepads>
</policy>
</transaction>
Entrée Exemple # 2
<transaction>
<policy>
<insco>CC</insco>
<notepads>
<notepad>
<author>Andy</author>
<notepad>
</notepads>
</policy>
</transaction>
Résultat prévu pour l'entrée # 2
<transaction>
<policy>
<insco>CC</insco>
</policy>
</transaction>
La version actuelle de Stylesheet
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="fn">
<xsl:template match="*">
<xsl:choose>
<xsl:when test="name()='notepads'">
<xsl:if test="/transaction/policy/insco='CC' and (notepad/author='John Doe')">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:if>
</xsl:when>
<xsl:when test="name()='notepad'">
<xsl:if test="author='John Doe'">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Merci pour votre réponse. Je ne sais pas si la complexité ajoutée en vaut la peine (le nom ne devrait pas changer ou si cela change tous les deux ans), mais je peux certainement voir l'utilité de la technique que vous avez affichée ici. – jwmajors81
La complexité des deux approches est à peu près comparable - bien sûr en fonction de votre connaissance de XSLT. En tout cas, vous décidez. ;) – Tomalak
Il me semble que vous avez "perdu" le contrôle '/ transaction/policy/insco = 'CC'' ... – Lucero