tags:

views:

296

answers:

1

I am parsing a document using XSLT. Within the XSLT I am loading a reference document using the document() function, and I can access items from both documents. Both the source document and the reference document have an attribute called name. How do I compare one to the other. I have got around this by declaring a variable, but I would rather do it without if possible. In my mind, I need to put namespaces around things, but have no idea how to do it.

source document:

<?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>

reference document (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" />
+1  A: 

Don't see a "name" attribute in your xml. Do you mean "id"? I don't think you can control namespaces here. See Ken Holman's discussion on this point here.

I would go with your idea of variables. Something like:

<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>

Andrew Cowenhoven