XSLT: проверьте, найден ли узел в списке узлов - PullRequest
3 голосов
/ 23 декабря 2011

Мне нужно проверить, есть ли конкретное значение в списке узлов.

Пока я использую for-each, и я думаю, что это не эффективно.хотел бы получить его в один выстрел.Как я могу?

Ответы [ 2 ]

3 голосов
/ 23 декабря 2011

При использовании так, как вы его используете, current() совпадает с . (см. Раздел 12.4 ).Однако цель current (в широком смысле) - получить возможность получить узел контекста всего выражения из предиката (где . представляет контекст предиката).

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

Это выражение XPath будет успешным, только если строковое значение узла контекста всего выражения совпадает с $ thisProduct.Очевидно, это не то, что вам нужно:

$ChildList[string(current())=string($thisProduct)]

Это выражение выполнится успешно, если в $ChildList найдется узел, который имеет то же строковое значение, что и $ thisProduct.он просматривает $ChildList узел, где выражение string(.)=string($thisProduct) истинно.

2 голосов
/ 23 декабря 2011

Используйте

$thisProduct = $ChildList

В случае, если thisProduct определено, чтобы содержать некоторое атомарное значение (не набор узлов или последовательность в XPath 2.0), а $ChildList - набор узлов (или последовательность в XPath 2.0), то вышеупомянутый XPath выражение оценивается как true() точно, когда есть узел (или элемент в XPath 2.0) в $ChildList, строковое значение которого равно строковому значению $thisProduct.

Это короткое выражение можно использовать в атрибуте test любой условной инструкции XSLT (xsl:if или xsl:when) или в шаблоне совпадения (атрибут match) любой инструкции xsl:template.

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