J'ai (dans un monde simplifié imaginaire) une structure XML source de base:
<?xml version='1.0'?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:variable name="myVar1" select="library/book[language='french']"/> <xsl:variable name="myVar2"> <xsl:copy-of select="library/book[language='french']"/> </xsl:variable> <xsl:value-of select="$myVar1/title"/> <xsl:value-of select="$myVar2/title"/> </xsl:template> </xsl:stylesheet>
4 Réponses :
Je le teste.
Si vous gatez un fichier avec votre entrée, vous pouvez l'inclure avec voici mon Fichier XML nommé Test_xml_1.xml: p> identique à votre égard. P> Voici mon code XSLT: P> xe.source [file_path]> code> p>
<?xml version="1.0" encoding="UTF-8"?><?xe.source ../TemporaryFiles/Test_XML_1.xml#library?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output media-type="text/xml" method="xml"></xsl:output>
<xsl:template match="/">
<xsl:variable name="myVar1" select="library/book[language='french']"></xsl:variable>
<xsl:variable name="myVar2">
<xsl:copy-of select="library/book[language='french']"></xsl:copy-of>
</xsl:variable>
<root>
<xsl:copy-of select="$myVar1"></xsl:copy-of>
<xsl:copy-of select="$myVar2"></xsl:copy-of>
</root>
</xsl:template>
</xsl:stylesheet>
Merci, mais mon objectif est d'utiliser myvar2 comme élément structuré. Dans la sortie, je ne veux pas de la structure d'intérêts, je veux interroger $ myvar2 / titre code> et diplay uniquement ce titre
@ user14027976 J'ai ajouté une ligne dans mon Awnser. Cela devrait être résolu votre problème;)
Je m'attends à ce que myvar1 et myvar2 soit le même p>
mais ils sont
pas strong> le même: p>
La première variable contient une référence
référence forte> au livre book code> nœud dans le Document source. P> li>
La deuxième variable contient une copie
forte> du livre code> nœud dans son propre document fort>. P>. li> ul>
Par conséquent, l'instruction: p>
xxx pré> retourne vide, car
titre code> n'est pas un enfant de
$ myvar2 < / code>. Le contenu de
$ myvar2 code> est le nœud code> copié code> et afin d'obtenir la valeur de son enfant
title code> nœud que vous devez utiliser: < / p>
xxx pré> blockquote>
Vous pouvez utiliser pour rendre votre variable contenir une séquence de nœuds d'élément au lieu d'un nœud de document (fragment) contenant les nœuds d'élément. P> P>
Les règles sont données à https://www.w3.org / Tr / xslt-30 / # valeurs variables p>
Résumé rapide: s'il n'y a pas d'attribut code> SELECT CODE> Attribut et non comme attribut code>, alors la valeur de la variable est un nouveau nœud de document, qui contient l'élément copié en tant que un enfant. C'est ce niveau supplémentaire qui arrête votre expression de chemin qui fonctionne. Avec
SELECT = "Bibliothèque / Book" Code> La valeur de la variable est un élément code> Book code>, avec le constructeur de séquence La valeur est un nœud de document qui a un
book < / code> élément comme son enfant. P>