0
votes

Utilisation de XSL: Copier - de la définition d'une variable dans XSLT 2.0

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>


0 commentaires

4 Réponses :


0
votes

Je le teste.

Si vous gatez un fichier avec votre entrée, vous pouvez l'inclure avec xe.source [file_path]> code> p>

voici mon Fichier XML nommé Test_xml_1.xml: p> xxx pré>

identique à votre égard. P>

Voici mon code XSLT: 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>


2 commentaires

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 et diplay uniquement ce titre


@ user14027976 J'ai ajouté une ligne dans mon Awnser. Cela devrait être résolu votre problème;)



0
votes

Je m'attends à ce que myvar1 et myvar2 soit le même

mais ils sont pas le même:

  • La première variable contient une référence référence au livre book nœud dans le Document source.

  • La deuxième variable contient une copie du livre nœud dans son propre document . .

    Par conséquent, l'instruction: xxx

    retourne vide, car titre n'est pas un enfant de $ myvar2 < / code>. Le contenu de $ myvar2 est le nœud copié et afin d'obtenir la valeur de son enfant title nœud que vous devez utiliser: < / p> xxx


0 commentaires

0
votes

Vous pouvez utiliser xxx

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.


0 commentaires

1
votes

Les règles sont données à https://www.w3.org / Tr / xslt-30 / # valeurs variables

Résumé rapide: s'il n'y a pas d'attribut SELECT Attribut et non comme attribut , 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" La valeur de la variable est un élément Book , avec le constructeur de séquence La valeur est un nœud de document qui a un book < / code> élément comme son enfant.


0 commentaires