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))]"/>