У меня есть 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>
Но это не работает.
Как я могу вызвать один и тот же узел более одного раза?