2010-06-16 8 views
2

J'ai actuellement un document XML qui consiste essentiellement en plusieurs conversations entre personnes, tout comme une conversation par messagerie instantanée.Coloriser des éléments uniques en XML en utilisant XSLT

J'ai chaque conversation affichant comment je veux jusqu'à présent, sauf que je veux que chaque nom soit une couleur unique pour la lisibilité.

Comment je l'ai c'est que le XML est transformé en HTML avec CSS. Je voudrais utiliser XPath et XSL 1.0 pour cela:

XML

<wtfwhispers xmlns="http://wtfwhispers.kicks-ass.org" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://wtfwhispers.kicks-ass.org wtfwhispers.xsd"> 
    <conversation uuid="Diedrick"> 
    <datePosted>2010-05-30</datePosted> 
    <description>What a great description</description> 
    <dialog> 
     <dialogDate>2009-12-22</dialogDate> 
     <whisper> 
     <whisperTime>03:55:00</whisperTime> 
     <speaker>Stubbymush</speaker> 
     <babble>i said something here</babble> 
     </whisper> 
     <whisper> 
     <whisperTime>03:56:00</whisperTime> 
     <speaker>Jaymes</speaker> 
     <babble>what did you say?</babble> 
     </whisper> 
     <whisper> 
     <whisperTime>03:56:00</whisperTime> 
     <speaker>Stubbymush</speaker> 
     <babble>i said something here!</babble> 
     </whisper> 
     ... 
     <whisper> 
     <whisperTime>03:57:00</whisperTime> 
     <speaker>Stubbymush</speaker> 
     <babble>gawd ur dumb</babble> 
     </whisper> 
    </dialog> 
    </conversation> 

</wtfwhispers> 

Idéalement ce que je veux est d'obtenir une sortie de <p class="speaker one"> pour le premier orateur, <p class="speaker two"> pour la 2ème et ainsi de suite.

je cherchais à utiliser et la méthode Meunchian pour trouver combien de haut-parleurs uniques je, mais ce que je ne travaillais pas:

... 
<xsl:key name="speakerList" match="wtf:whisper" use="wtf:speaker" /> 

    <xsl:template match="/"> 
     <html lang="en"> 
     <body> 
     <p> 
      <xsl:value-of select="count(key('speakerList', wtf:speaker))" /> 
     </p> 
     </body> 
     </html> 
    </xsl:template> 
... 

Quand je entrée « Jaymes » ou « Stubbymush » j'obtenir le nombre exact de fois où le locuteur a parlé, mais pas le nombre total de locuteurs dans le total de la conversation.

Merci d'avance et si vous avez des suggestions pour des méthodes plus simples parce que je suis trop compliqué s'il vous plaît aviser.

+0

Bonne question (1). Voyez ma réponse pour une solution simple. –

Répondre

1

Cette transformation:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:w="http://wtfwhispers.kicks-ass.org" 
> 
<xsl:output method="text"/> 

<xsl:key name="kSpeakerByVal" match="w:speaker" use="."/> 

<xsl:template match="/"> 
    <xsl:value-of select= 
    "count(
      /*/*/*/w:whisper/w:speaker 
         [generate-id() 
         = 
         generate-id(key('kSpeakerByVal',.)[1]) 
         ] 
     ) 
    "/> 
</xsl:template> 
</xsl:stylesheet> 

lorsqu'il est appliqué sur le document XML fourni, produit le haut-parleur correct compte:

2 
+0

Merci Dimitre fonctionne parfaitement! Cela me donnait vraiment une migraine. – Jimmerz28

Questions connexes