XSL + XPath для доступа к другому элементу в другой ветке - PullRequest
1 голос
/ 25 мая 2020

Добрый день,

Мне нужно вернуть значение в элементе, который не является частью текущей ветви процесса. Другими словами, это зигзаг от моей текущей позиции.

В настоящее время я нахожусь в темно-синем элементе, и мне нужно вернуть значение в светло-синем элементе. Как показано ниже;

Диаграмма XSD

Мой код выглядит следующим образом:

<xsl:for-each select="$HDRLVL/ITEMLEVEL/ORDITMINF">
          <xsl:call-template name="Lines"/>
        </xsl:for-each>

 <xsl:template xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="Lines">
        <LINE>  
          <MainRef>
            <xsl:choose>
              <xsl:when test="$MainVessel = 'BlueWhale'">
                <xsl:value-of select="preceding-sibling::ROUTES/REF[@ADDTYP='CA' and CDE='AFA']/VAL"/>
              </xsl:when>
            </xsl:choose>
          </MainRef>    
        </LINE>
  </xsl:template>

Итак, вы можете видеть, что я пытаюсь получить доступ к элементу который происходит вне текущего блока цикла. Я пробовал различные методы, такие как '..', 'ancestor' и c, но не могу вернуть ни одного значения в голубом блоке.

Пожалуйста, помогите?

1 Ответ

0 голосов
/ 25 мая 2020

Глядя на схему, элемент ROUTES не находится на той же оси, что и ORDITMINF.

Таким образом, вы можете выбрать элемент, который хотите, используя абсолютный путь, например:

<xsl:value-of select="//SHPLVL/SPHINF/SEA/ROUTES/REF[@ADDTYP='CA' and CDE='AFA']/VAL"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...