2013-02-16 4 views
0

Вот Еогеасп в моем XSLT файл:XSL Еогеасп получает только первое значение узла

<xsl:for-each select="/flights/flight/route[../plane/name/. ='Airbus 330']/routename"> 
     <tr> 
      <td> 
       <xsl:attribute name="colspan" >2</xsl:attribute><xsl:attribute name="style" >text-align:center</xsl:attribute><a><xsl:attribute name="href">map.php?a=<xsl:value-of select="/flights/flight/route[../plane/name/. =$a]/from/latitude" />&amp;b=<xsl:value-of select="/flights/flight/route[../plane/name/. =$a]/from/longitude" />&amp;c=<xsl:value-of select="/flights/flight/route[../plane/name/. =$a]/to/latitude" />&amp;d=<xsl:value-of select="/flights/flight/route[../plane/name/. =$a]/to/longitude" />&amp;e=<xsl:value-of select="/flights/flight/route[../plane/name/. =$a]/routename" /></xsl:attribute> 
       <xsl:value-of select="/flights/flight/route[../plane/name/. ='Airbus 330']/routename"/></a> 
      </td> 
     </tr> 
    </xsl:for-each> 

Есть два пути, которые имеют Airbus 330 самолета, при выполнении этого для каждого, он создает два строки таблицы и ссылки по желанию, но используя первое имя маршрута дважды, вместо каждого имени маршрута. Почему это происходит?

Вот XML-файл:

<?xml version="1.0" encoding="UTF-8"?> 

<flights 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="flights.xsd"> 

<flight flightid="1"> 
    <flightno>EK98</flightno> 
    <callsign>UAE98</callsign> 
    <airline>Emirates Airline</airline> 

    <plane planeid="1"> 
     <name>Airbus 330</name> 
     <speed>567</speed> 
     <registereddate>07-06-10</registereddate> 
    </plane> 

    <registration>3A6-EDJ</registration> 
    <altitude height="feet">41000 feet</altitude> 
    <speed ratio="mph">564 mph</speed> 

    <route> 
    <routename>Fiumicino-Dubai</routename> 
    <course bearing="degrees">154 degrees</course> 
    <distance type="miles">2697 miles</distance> 
    <duration>PT5H30M</duration> 

     <from> 
      <iatacode>FCO</iatacode> 
      <airport>Fiumicino</airport> 
      <country>Italy</country> 
      <city>Rome</city> 
      <latitude>41.8044</latitude> 
      <longitude>12.2508</longitude> 
     </from> 

     <to> 
      <iatacode>DXB</iatacode> 
      <airport>Dubai Intl</airport> 
      <country>UAE</country> 
      <city>Dubai</city> 
      <latitude>25.2528</latitude> 
      <longitude>55.3644</longitude> 
     </to> 
    </route> 

</flight> 


<flight flightid="2"> 
    <flightno>BA283</flightno> 
    <callsign>BAW283</callsign> 
    <airline>British Airways</airline> 

    <plane planeid="2"> 
     <name>Airbus 330</name> 
      <speed>567</speed> 
     <registereddate>06-12-97</registereddate> 
    </plane> 


    <registration>3A6-EDJ</registration> 
    <altitude height="feet">41000 feet</altitude> 
    <speed ratio="mph">564 mph</speed> 

    <route> 
     <routename>London-L.A</routename> 
     <course bearing="degrees">154 degrees</course> 
     <distance type="miles">5441 miles</distance> 
     <time>PT11H5M</time> 
     <from> 

      <iatacode>LHR</iatacode> 
      <airport>Heathrow</airport> 
      <country>England</country> 
      <city>London</city> 
      <latitude>51.4775</latitude> 
      <longitude>0.4614</longitude> 
     </from> 

     <to> 
      <iatacode>LAX</iatacode> 
      <airport>Los Angeles Intl</airport> 
      <country>USA</country> 
      <city>L.A</city> 
      <latitude>33.9471</latitude> 
      <longitude>-118.4082</longitude> 
     </to> 
    </route> 

</flight> 

</flights> 

ответ

2

Просто замените <xsl:value-of select="/flights/flight/route[../plane/name/. ='Airbus 330']/routename"/></a> с <xsl:value-of select="."/>. Внутри for-eachroutename является контекстным узлом, и вы хотите вывести его (и не начинать новую навигацию по документу).

+0

Спасибо, что работала, теперь ссылка состоит из двух разных названий маршрутов, но передаваемые параметры по-прежнему являются первым набором, вы можете показать мне, как итерации к следующему набору параметров, я пробовал это, но он не работал : map.php? a = deucalion0

+1

Как вы обрабатываете «имя_программы» в качестве контекстного узла, вам нужно «', который подходит к родительскому «маршруту», а затем к потоку «from/latitude», или, альтернативно, вы можете получить доступ к sibling ''. В качестве третьего варианта вы можете изменить 'for-each' для обработки элементов' route', а затем вы можете использовать '' и ' '. –

+0

Спасибо большое, что сработало, я также понимаю немного больше, как это работает. Благодаря!! – deucalion0

Смежные вопросы