Je me demande comment il se fait par XSLT 1.0 une transformation qui passe le résultat d'un modèle comme une entrée pour un autre dans un seul fichier .xslt:XSLT 1.0 - Exécution d'un modèle sur le résultat d'un autre modèle
Raw XML d'entrée> call-template (1)> reformaté XML> call-template (2) sur la reformaté XML
Case:
Je veux écrire un modèle de re- arrangez un XML pour que les attributs deviennent des éléments; puis exécutez un autre modèle sur le fichier XML résultant de la première pour supprimer les doublons. Je peux avoir deux fichiers xsl et passer le résultat de la première transformation à la seconde. Cependant, je veux le faire en un xslt.
Le xml d'entrée brute est la suivante:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<resource>
<properties>
<property name="name" value="Foo"/>
<property name="service" value="Bar"/>
<property name="version" value="1"/>
</properties>
</resource>
<resource>
<properties>
<property name="name" value="Foo"/>
<property name="service" value="Bar"/>
<property name="version" value="2"/>
</properties>
</resource>
<resource>
<properties>
<property name="name" value="AnotherFoo"/>
<property name="service" value="AnotherBar"/>
<property name="version" value="1"/>
</properties>a
</resource>
</resources>
Lorsque je demande la xslt suivante:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes" />
<xsl:template name="attributes-to-elements" match="/resources">
<xsl:call-template name="get-resources" />
</xsl:template>
<xsl:template name="get-resources">
<xsl:text>
</xsl:text>
<products>
<xsl:for-each select="resource">
<xsl:call-template name="convert-attributes-to-elements" />
</xsl:for-each>
</products>
</xsl:template>
<xsl:template name="convert-attributes-to-elements">
<product>
<name>
<xsl:value-of select="properties/property[@name='name']/@value" />
</name>
<service>
<xsl:value-of select="properties/property[@name='service']/@value" />
</service>
</product>
</xsl:template>
</xsl:stylesheet>
Je suis capable de reformater le xml sans les versions et obtenir la sortie qui ne contient pas de versions et les attributs sont devenus des éléments:
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<name>Foo</name>
<service>Bar</service>
</product>
<product>
<name>Foo</name>
<service>Bar</service>
</product>
<product>
<name>AnotherFoo</name>
<service>AnotherBar</service>
</product>
</products>
Maintenant, la chose que je veux est Pour transmettre ce fichier XML modifié à un modèle en tant que , entrez le code XML et supprimez les doublons. Enfin, je veux obtenir un xml comme:
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<name>Foo</name>
<service>Bar</service>
</product>
<product>
<name>AnotherFoo</name>
<service>AnotherBar</service>
</product>
</products>
Votre question sur la façon d'appliquer un modèle au résultat d'un autre modèle (et scénario donné est seulement un exemple), ou demandez-vous comment réaliser la tâche dans l'exemple? Si ce dernier, il peut être fait en un seul passage. –