J'ai un document xml que je dois remplacer des noeuds spécifiques avec des segments xml partiels qui contiennent à la fois des noeuds ainsi que le traitement-instructions. Je veux préserver les PI mais je rencontre des problèmes dans le remplacement.XSLT importer un segment XML partiel en XML avec traitement-instructions
exemple du segment: general.xml
<root>
<!--General Settings -->
<?mapping EnvironmentSetting="envname"?>
<setting name="SubscriptionName" value="*" />
</root>
Source xml:
<environment>
<General />
</environment>
Transform -
<xsl:template match="* | processing-instruction() | comment()">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*/General">
<xsl:copy-of select="document('general.xml')/root"/>
</xsl:template>
La sortie est:
<environment>
<root>
<!--General Settings -->
<?mapping EnvironmentSetting="envname"?>
<setting name="SubscriptionName" value="*" />
</root>
</environment>
Mais je veux:
<environment>
<!--General Settings -->
<?mapping EnvironmentSetting="envname"?>
<setting name="SubscriptionName" value="*" />
</environment>
Modification de la section du document à la racine/* gouttes traitement-instructions (et commentaires)
<xsl:copy-of select="document('general.xml')/root/*"/>
...
<environment>
<setting name="SubscriptionName" value="*" />
</environment>
Modification de la section du document à-instructions processus root/drops les nœuds
<xsl:copy-of select="document('general.xml')/root/processing-instruction()"/>
...
<environment>
<?mapping EnvironmentSetting="envname"?>
</environment>
Essayer de faire un | correspond juste au premier paramètre -
<xsl:copy-of select="document('general.xml')/root/processing-instruction() | * | comment()"/>
...
<environment>
<?mapping EnvironmentSetting="envname"?>
</environment>
Alors, comment puis-je obtenir mon gâteau et le manger aussi? J'ai l'air si proche, mais j'ai de la difficulté à trouver des exemples de ce que je veux faire.
Votre modèle d'identité modifiée est plutôt étrange. Il est plus utile de commencer avec un modèle d'identité réel et d'ajouter des modèles vides pour les types de nœuds que vous ne voulez pas copier, par exemple. '
Tomalak
Je ne sais pas bien compris votre commentaire, quelle partie de votre vous référant comme modèle d'identité Je suis assez nouveau à XSLT.? , alors s'il vous plaît pardonnez mon ignorance si cela semble que je pose une question stupide. – James
Je me réfère à la première '' votre question. l'identité de transformation (aka modèle d'identité) est l'un des véritables bases de XSLT. Vous allez trouver des tonnes de matériel de lecture par ces mots-clés seul. –
Tomalak