Récupérer toutes les valeurs d'attribut à partir de XML à l'aide de XSLT
Je ne peux pas comprendre comment accéder à tous les attributs dans une balise à partir d'un document XML.
Disons que j'ai le code XML suivant:
<names>
<name firstname="Rocky" lastname="Balboa" divider=", "/>
<name firstname="Ivan" lastname="Drago" divider=", "/>
</names>
Je veux la sortie suivante:
Rocky Balboa, Ivan Drago,
Ce que j'ai actuellement est:
<xsl:for-each select="names/name">
<xsl:value-of select="@firstname"/>
<xsl:value-of select="@lastname"/>
<xsl:value-of select="@divider"/>
</xsl:for-each>
Ce que je me demande si il est possible de faire cela en seulement un value-of select au lieu d'avoir à faire à eux trois. Donc, pour clarifier, je veux être en mesure de produire tous les attributs de la balise avec un seul value-of select. Est-ce possible?
Grâce.
Vous pouvez utiliser cette XPath @* pour obtenir tous les attributs, par ex.: <br/> <xsl:template match="/*"> <xsl:for-each select="@*"> <xsl:value-of select="concat(nom(), ': ', ., '')"/> </xsl:for-each> </xsl:template>
veuillez prendre en compte les fromatting. En raison d'étranges raisons de formatage ne fonctionne pas sur ma fin.
Bien, je suppose que vous pourriez le faire aussi. Mais je veux comprendre comment/si c'est possible de le faire dans la façon dont je l'ai, mais avec juste un value-of select.
C'est ce que j'ai mentionné. Si vous référer à l'exemple ci-dessus @* utilisation vous allez le voir, il faudra seulement une valeur de sélectionner et de vous sera la bonne. J'espère que cette aide. Je suis re-poster mon commentaire, avec une meilleure mise en retrait et la mise en forme ci-dessous. Hoe qui vous aideront.
Comment voulez-vous gérer des blancs. Ce n'est même pas raisonnable dans votre courant de la solution. (Vous êtes de la génération
veuillez prendre en compte les fromatting. En raison d'étranges raisons de formatage ne fonctionne pas sur ma fin.
Bien, je suppose que vous pourriez le faire aussi. Mais je veux comprendre comment/si c'est possible de le faire dans la façon dont je l'ai, mais avec juste un value-of select.
C'est ce que j'ai mentionné. Si vous référer à l'exemple ci-dessus @* utilisation vous allez le voir, il faudra seulement une valeur de sélectionner et de vous sera la bonne. J'espère que cette aide. Je suis re-poster mon commentaire, avec une meilleure mise en retrait et la mise en forme ci-dessous. Hoe qui vous aideront.
Comment voulez-vous gérer des blancs. Ce n'est même pas raisonnable dans votre courant de la solution. (Vous êtes de la génération
RockyBalboa, IvanDrago,
.)OriginalL'auteur Erik Åstrand | 2013-05-15
Vous devez vous connecter pour publier un commentaire.
Parce que je ne suis pas sûr si l'utilisation de
xsl:value-of
est un dur exigence, peut-être quelque chose comme ce qui suit pourrait être ce que vous êtes de verrouillage pour.Vous pouvez utiliser
<xsl:apply-templates select="names/name" mode="print"/>
quelle que soit la position que vous avez jugé à propos de l'aide d'une une ligne de la valeur de tous les attributs.
Le modèle ci-dessus génère la sortie suivante:
Mise à jour de caisse de sortie sans l'aide de l'attribut noms:
OriginalL'auteur hr_117
essayez ce qui suit:
OriginalL'auteur james31rock
Vous pouvez utiliser cette XPath @* pour obtenir tous les attributs, par exemple:
Cela vous permettra d'utiliser un seul value-of select pour obtenir le résultat que vous souhaitez. Il faudra tout attribut en considération.
Cela devrait être suffisant astuce pour vous de comprendre les choses. Laissez-moi savoir si vous avez toute autre question.
firstname: Ivan lastname:...
(le cas échéant). Mais demandé est de:Rocky Balboa, Ivan Drago,
OriginalL'auteur user1188611
Si vous pouvez utiliser XSLT 2.0, vous pouvez faire quelque chose comme ceci:
Ce sera la sortie de tous les attributs et vous n'avez aucun contrôle sur l'ordre, donc, si vous voulez spécifier une commande, vous pouvez soit utiliser une séquence:
ou faire un
xsl:apply-templates
avec unxsl:sort
pour trier les attributs parname()
(ou autre). Laissez-moi savoir si vous voulez un exemple.C'est ce que
<xsl:value-of select="@*[not(name()='divider')]" separator=" "/>
n'sauf qu'il ignore lesdivider
attribut. Vous pouvez également faire de<xsl:value-of select="@*" separator=" "/>
, mais vous ne pouvez pas être garanti quedivider
serait la dernière sortie.OriginalL'auteur Daniel Haley
Les ouvrages suivants, en XSLT 2.0:
et dans la version 3.0, vous pouvez le faire:
si vous pouvez avoir besoin de faire des ajustements pour obtenir l'espace comme vous le souhaitez.
Eh bien, c'est tout simplement
@*
.OriginalL'auteur Michael Kay