Итак, я пытался понять, почему XPath не возвращает правильные значения, когда я ввожу то, что кажется правильным (синтаксис мудрый).Функция XSL: position() и подсчет: неточные результаты
Целью здесь является создание метки Gs1, которая отображает общее количество «контейнеров», а какой контейнер является текущим контейнером. (Контейнер {i} of {total})
В этом конкретном примере каждый цикл проходит через раздел ASNShipmentContainers и понимает, что в ASNShipmentContainers имеется 6 ASNShipmentContainer и поэтому выводит 6 разных меток.
Я понял, что функция position() будет лучшим способом вернуть, в какую итерацию мой цикл foreach включен. Я googled вверх и вниз, и понял, что это будет самый простой и правильный способ сделать это. Но при его реализации он постоянно возвращает «1» на каждую метку вместо увеличения.
Кроме того, когда я пытаюсь найти значение для всех контейнеров, я использую: count (ASNShipmentContainers/ASNShipmentContainer), который совпадает с тем, что объявлено в цикле foreach, и должно вернуть значение моего общего контейнера 6. Но это также возвращает 1.
Вот соответствующий код:
<xsl:variable name="ROOT" select="." />
<!--For each loop, knows there are 6 iterations-->
<xsl:for-each select="ASNShipmentContainers/ASNShipmentContainer">
<Section Margins="5,5">
<!--Start creation of table that will display info here-->
<Table Width="275" Height="30" Margins="161,0,0,0">
<Row Height="100%">
<Cell Borders="Black" Width=".125"/>
<Cell Width="274.375">
<Text>Count:<xsl:value-of select="position()" /> of <xsl:value-of select="count(ASNShipmentContainers/ASNShipmentContainer))" /></Text>
</Cell>
<Cell Borders="Black" Width=".5"/>
</Row>
</Table>
</Section>
</xsl:for-each>
Так почему же значение позиции и общего количества контейнеров как «1», когда я делаю это. Я понимаю, что позиция должна работать, даже если она вызывается внутри цикла for-each.
Кроме того, если бы я попросил подсчет Контейнеров, не должен ли я получить общее количество? Почему это дало бы мне 1.
Единственное, что я могу себе представить, это то, что каким-то образом область видимости отключена для моих операторов цикла/выбора. Это потребует другого использования?
Редактировать: Спасибо за ваши быстрые ответы, но проблема действительно не связана с XSL. После того, как он наконец работал с тем, кто использовал этот код раньше, он объяснил мне, что проблема исходила из нашего кода на C#, а не из самого XSL. C# удалит все элементы, над которыми он не работал, поэтому каждый раз, когда я пытался подсчитать все элементы, это дало бы мне один, потому что технически было только одно.
Спасибо.
Пожалуйста, включите пример ввода и ожидаемый выход. –
Просьба показать образец ввода и показать нам также весь шаблон, чтобы мы могли видеть, что является узлом контекста. –
Обратите внимание, что ваше выражение: 'count (ASNShipmentContainers/ASNShipmentContainer))' недействительно (несбалансированные круглые скобки) - так что вы не смогли получить результаты, которые вы требуете, используя этот код. –