XSLT Как вызвать другой узел по подстроке имени текущего узла? - PullRequest
0 голосов
/ 06 августа 2020

У меня есть XML документ с приведенной ниже структурой:

<Data>
   <FieldBook>
     <PointRecord>
       <Name>12_REF1</Name>
       (...)
     </PointRecord>
     <PointRecord>
       <Name>12_REF2</Name>
       (...)
     </PointRecord>
     <PointRecord>
       <Name>12</Name>
       (...)
     </PointRecord>
   </FieldBook>
   <Reductions>
    <Point>
        <Name>12_REF1</Name>
        <MyNecessaryValue>9999</MyNecessaryValue>
    </Point>
    <Point>
        <Name>12_REF2</Name>
        <MyNecessaryValue>8888</MyNecessaryValue>
    </Point>
    <Point>
        <Name>12</Name>
        <MyNecessaryValue>1000</MyNecessaryValue>
    </Point>
   </Reductions>
</Data>

Большая часть моих данных находится в FieldBook , но я также должен вызвать некоторые из Сокращений узлов для получения других данных, обычно перебирая записи с использованием их идентификаторов.

Но я также должен получить определенные c значения для вычислений: например. Мне нужно сравнить MyNeededValue из Reductions / Point 12_REF1 и 12_REF2 оба с Reductions / Point 12 , поэтому мне нужно вызвать один и тот же узел для двух записей в l oop.

Согласно this topi c Я подготовил ключ <xsl:key name="red-pointName" match="Reductions/Point" use="Name"/> и попробовал использовать его таким образом, с подстрокой:

<xsl:for-each select="/JOBFile/FieldBook/PointRecord">
   (...)    
     <td>
        <xsl:choose>
            <xsl:when test="Method='GpsContinuousOffsetPointOne'">
                <xsl:call-template name="my-format">
                <xsl:with-param name="Val" select="key('red-pointName', substring-before-last(current(Name),'_')')/MyNecessaryValue"/>
                    <xsl:with-param name="format" select="$DecPl2"/>
                </xsl:call-template>
                </xsl:when>
            <xsl:otherwise>---</xsl:otherwise>
        </xsl:choose>
    </td>
  (...) 
</xsl:for-each>

Но это не работает.

Как я могу вызвать один и тот же узел более одного раза?

1 Ответ

0 голосов
/ 06 августа 2020

Если вы хотите, например, key('red-pointName', '12') найти все элементы Point, где Name начинается с 12 перед _, вам нужно изменить объявление ключа, например, на <xsl:key name="red-pointName" match="Reductions/Point" use="replace(Name, '_.*$', '')"/>. и, конечно, убедитесь, что где бы вы ни вызывали функцию key, вы затем убедитесь, что вы передаете только правильное значение, то есть строку перед _.

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