Доступ к одинаковым элементам имени для нескольких источников - PullRequest
2 голосов
/ 03 декабря 2008

Я анализирую документ, используя 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>

1009 * 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 Ответ

3 голосов
/ 03 декабря 2008

Не вижу атрибута "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>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...