Как получить родительский узел от ребенка, используя XSLT - PullRequest
0 голосов
/ 21 мая 2018

У меня проблемы с поиском всех родителей для повторения имени ребенка.

<NCAAScores>
   <levels>
      <level>
         <name>Western Conference</name>
         <teams>
            <team>
               <name>Dallas Stars</name>
               <scorable>
                  <win>60</win>
                  <lose>35</lose>
               </scorable>
            </team>
            <team>
               <name>Chicago Blackhawks</name>
               <scorable>
                  <win>60</win>
                  <lose>23</lose>
               </scorable>
            </team>
            <team>
               <name>Edmonton Oilers</name>
               <scorable>
                  <win>55</win>
                  <lose>9</lose>
               </scorable>
            </team>
            <team>
               <name>Philadelphia Flyers</name>
               <scorable>
                  <win>5</win>
                  <lose>9</lose>
               </scorable>
            </team>
         </teams>
      </level>
      <level>
         <name>Eastern Conference</name>
         <teams>
            <team>
               <name>Dallas Stars</name>
               <scorable>
                  <win>1</win>
                  <lose>34</lose>
               </scorable>
            </team>
<!---And so on, you get the idea-->  
         </teams>
      </level>
  </levels>
</NCAAScores>

Если я хочу получить весь родительский уровень с командой "Звезды Далласа", какой будет подход?

Я пробовал ниже

./levels[/level/teams/team/name = 'Dallas Stars']

, который не помог.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Ошибка типа, которую вы упомянули, связана со сравнением узла со строкой.Вы должны сначала извлечь текст из узла.Попробуйте это:

//levels/level[teams/team/name/text()='Dallas Stars']/name

Я подготовил это здесь как скрипку: https://xsltfiddle.liberty -development.net / 6qVRKw2 / 1

0 голосов
/ 22 мая 2018

Пожалуйста, попробуйте следующий шаблон.Здесь используется ось ancestor:: для поиска level/name из текущего контекста узла.

<xsl:template match="level">
    <xsl:for-each select="teams/team[name='Dallas Stars']">
        <name>
            <xsl:value-of select="ancestor::level/name" />
        </name>
    </xsl:for-each>
</xsl:template>

В качестве альтернативы, вы также можете использовать

<xsl:value-of select="../../name" />

, чтобы подняться на уровни оттекущий контекст узла, но я предпочитаю использовать ancestor для простоты понимания.

Вывод

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