2012-01-24 3 views
0

J'essaie de convertir XML en HTML en utilisant XSLT. Dans cette zone, j'ai besoin de lire des valeurs de nœuds répétées.Lecture de la valeur de noeud répétée dans XSLT

Tenir compte de ce scénario

<root> 
    <test> 
    <ID> 123 <</ID> 
    <Name> MyName </Name> 
    <Country> India </Country> 
    <Books> 
    <language> C </language> 
    <language> C++ </language> 
    <language> Java </language> 
    <language> XML </language> 
    </Books> 
</root> 

Dans cet exemple, je suis capable de lire toutes les valeurs de nœud comme

<xsl:value-of select="ID"> 

sauf nœud "langue". J'ai besoin d'une sortie comme C++ Java XML. Une idée ????

+0

vous avez besoin de xsl foreach, ou un modèle xsl pour faire ce genre de chose. Pour chacun fera probablement le travail, basé sur les données que vous avez postées. –

+0

Postez votre code xslt. Je vais le corriger pour vous :) –

Répondre

0
<xsl:for-each select="Books/language"> 
<xsl:value-of select "." /> 
<xsl:text> </xsl:text> 
</xsl:for-each> 
2

Utilisation:

string(/*/*/Books) 

Cette expression XPath évalue la string value du premier (dans votre cas, il est juste un) élément Books qui est un enfant de tout élément qui est un enfant de l'élément supérieur du document XML.

Par définition, le string value d'un élément est la concaténation (dans l'ordre du document) de tous ses descendants de nœuds de texte.

Code complet:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <xsl:value-of select="string(/*/*/Books)"/> 
</xsl:template> 
</xsl:stylesheet> 

lorsque cette transformation est appliquée sur la condition (mais corrigée à fait bien formé !!!) document XML:

<root> 
    <test> 
     <ID> 123 </ID> 
     <Name> MyName </Name> 
     <Country> India </Country> 
     <Books> 
      <language> C </language> 
      <language> C++ </language> 
      <language> Java </language> 
      <language> XML </language> 
     </Books> 
    </test> 
</root> 

l'expression XPath est évaluée et le résultat est généré:

C C++ Java XML 
+0

ça va être parfait! Upvote :) –

+0

Hey programmeur infantile, vous êtes de retour - et vous êtes les bienvenus. :) –

+0

merci beaucoup :) –

0

est ici quelques conseils, mais vraiment, je recommande fortement que vous passer quelques heures de travail à travers un tutoriel décent tels que http://www.w3schools.com/xsl/

Tout d'abord, comme Dimitrie a votre XML est pas bien formé. Je suis un peu surpris que votre analyseur XSLT ne s'est pas fâché à ce sujet. Vous avez un tag de test d'ouverture qui n'est jamais fermé et un < supplémentaire dans votre balise Id de fermeture. En outre, votre expression de valeur n'est pas correctement fermée

Deuxièmement, vous dites "Dans cet exemple, je suis capable de lire toutes les valeurs de nœud comme ..." Ce genre de n'a pas de sens sans voir le reste de votre code et je devine qu'il ressemble à ceci:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 
<xsl:template match="/root"> 
    <xsl:value-of select="ID"/> 
</xsl:template>  
</xsl:stylesheet> 

il est essentiel de comprendre ce que le xsl: peu de correspondance de modèle signifie que si vous allez pouvoir écrire XSLT. XSLT parcourt votre document pièce par pièce en appliquant les règles que vous lui donnez pour transformer le document d'entrée en document de sortie.

À chaque étape, vous devez savoir où il se trouve dans le document. Ceci est connu comme le "contexte". Dans le code ci-dessus, la règle est appliquée quand elle arrive à/root. Cela signifie la chose entre crochets appelée racine qui n'a pas de chose englobante entre les chevrons.Étant donné ce contexte, les expressions XSLT sont relatives à ce contexte. C'est un peu comme les chemins du répertoire DOS. À moins que vous ne connaissiez le répertoire actuel, les chemins relatifs aux fichiers ne signifient pas grand-chose. Donc, dans votre exemple, select = "ID" signifie la valeur de la balise ID qui est l'enfant du contexte actuel, c'est-à-dire/root/ID.

Votre question était comment l'élément de langue. Eh bien, si le contexte du moteur est/root, alors vous devez aller vers les livres, puis redescendre vers la langue afin que l'expression soit ID/livres/langue

Bien sur vous pour essayer d'apprendre XSLT si. Ce n'est pas vraiment difficile et c'est un langage extraordinairement puissant pour le traitement XML.

Questions connexes