2 votes

Accès à des éléments de même nom pour des sources multiples

J'analyse un document à l'aide de XSLT. Dans le XSLT, je charge un document de référence à l'aide de la fonction document(), et je peux accéder aux éléments des deux documents. Le document source et le document de référence ont tous deux un attribut appelé nom. Comment puis-je comparer l'un à l'autre ? J'ai contourné ce problème en déclarant une variable, mais je préférerais le faire sans si possible. Dans mon esprit, je dois mettre des espaces de noms autour des choses, mais je n'ai aucune idée de la façon de le faire.

document source :

<?xml version="1.0" encoding="UTF-8"?>
<SoccerMatch revision="21" id="2849180" date="20080405" scheduledStart="1245" venue="Emirates Stadium" status="Result" comment="" league="Friendly Match" attendance="60111">
    <stuffhere>stuff</stuffhere>
    <stuffhere>stuff</stuffhere>
    <stuffhere>stuff</stuffhere>
    <stuffhere>stuff</stuffhere>
    <stuffhere>stuff</stuffhere>
</SoccerMatch>

document de référence (comp.xml) :

<?xml version="1.0" encoding="utf-8"?>
<competitions>
    <competition id="100" league="Barclays Premier League"/>
    <competition id="101" league="The Coca-Cola Football League Championship"/>
    <competition id="101" league="The Coca-Cola Football League Championship Play-Offs Semi-Final"/>
    <competition id="101" league="The Coca-Cola Football League Championship Play-Offs Final"/>
    <competition id="102" league="Coca-Cola Football League One"/>
    <competition id="102" league="Coca-Cola Football League One Play-Offs Semi-Final"/>
    <competition id="102" league="Coca-Cola Football League One Play-Offs Final"/>
    <competition id="103" league="Coca-Cola Football League Two"/>
    <competition id="103" league="Coca-Cola Football League Two Play-Offs Semi-Final"/>
    <competition id="103" league="Coca-Cola Football League Two Play-Offs Final"/>
    <competition id="104" league="Blue Square Premier"/>
    <competition id="104" league="Blue Square Premier Play-Offs Semi-Final"/>
    <competition id="104" league="Blue Square Premier Final"/>
    <competition id="105" league="Nationwide Championship Shield"/>
    <competition id="120" league="Clydesdale Bank Premier League"/>
    <competition id="121" league="The Irn-Bru Scottish Football League Championship First Division"/>
    <competition id="121" league="The Irn-Bru Scottish Football League Championship First Division Play-Offs Semi-Final"/>
    <competition id="121" league="The Irn-Bru Scottish Football League Championship First Division Play-Offs Final"/>
    <competition id="122" league="The Irn-Bru Scottish Football League Championship Second Division"/>
    <competition id="122" league="The Irn-Bru Scottish Football League Championship Second Division Play-Offs Semi-Final"/>
    <competition id="122" league="The Irn-Bru Scottish Football League Championship Second Division Play-Offs Final"/>
    <competition id="123" league="The Irn-Bru Scottish Football League Championship Third Division"/>
</competitions>

XSLT

<xsl:template match="/SoccerMatch">
<xmlfeed>
<payload payload_class="mobile_football_match_details" payload_name="Payload">
<xsl:variable name="compId" select="document('comp.xml')/competitions/competition[@league=@league]/@id" />

3voto

Andrew Cowenhoven Points 2371

Je ne vois pas d'attribut "name" dans votre xml. Voulez-vous dire "id" ? Je ne pense pas que vous puissiez contrôler les espaces de noms ici. Voir la discussion de Ken Holman sur ce point aquí .

Je suivrais votre idée de variables. Quelque chose comme :

<xsl:template match="/SoccerMatch">
 <xsl:variable name="matchId" select="@id"/>    
 <xsl:for-each select="document('competitions.xml')/competitions/competition">
   <xsl:if test="$matchId = @id">
     <xmlfeed>
      <payload payload_class="mobile_football_match_details" payload_name="Payload">
        <!-- add more stuff here-->
      </payload>
     </xmlfeed>
   </xsl:if>
 </xsl:for-each>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X