Я разбираю документ с помощью XSLT. В XSLT я загружаю справочный документ с помощью функции document () и могу получить доступ к элементам из обоих документов. Как исходный документ, так и справочный документ имеют атрибут с именем name. Как сравнить одно с другим. Я обошел это, объявив переменную, но я бы предпочел обойтись без нее, если это возможно. На мой взгляд, мне нужно размещать пространства имен вокруг вещей, но я не знаю, как это сделать.
исходный документ:
<?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>
справочный документ (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" />





Не вижу атрибута name в вашем xml. Вы имеете в виду "id"? Я не думаю, что здесь можно управлять пространствами имен. См. Обсуждение Кена Холмана по этому поводу здесь.
Я бы согласился с вашим представлением о переменных. Что-то типа:
<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>