xslt: какой самый простой способ сделать отрицательный выбор?

В основном я хотел бы найти что-то вроде этого, чтобы найти все узлы, в которых невозможно найти идентификатор ("неработающие ссылки"):

<xsl:variable name="failedIDLookups" select="//inventory/box[@boxtypeID != //boxtypes/@ID]"/>

Но это работает не так, как ожидалось - я полагаю, синтаксис неправильный, каким должен быть правильный способ сделать это?

1 ответ

Решение

Я подозреваю, что вы хотите

<xsl:variable name="failedIDLookups" select="//inventory/box[not(@boxtypeID = //boxtypes/@ID)]"/>

который затем может быть оптимизирован с помощью объявления ключа (как потомок xsl:stylesheet)

<xsl:key name="boxtypes-ref" match="boxtypes" use="@ID"/>

а также

<xsl:variable name="failedIDLookups" select="//inventory/box[not(key('boxtypes-ref', @boxtypeID))]"/>
Другие вопросы по тегам