Всегда трудно реконструировать ваши требования из нерабочего кода, но я думаю, что вы пытаетесь выбрать элементы с @status="0"
, и для каждого из них вывести на экран логических предков, то есть рекурсивное расширение отношения parent(X)
, где parent(X)
выбирает элемент, @id которого равен X/@parent-id
.
Я давно не кодировал в XSLT 1.0 (он был заменен на долгое время время сейчас ...) поэтому извиняюсь, если я сделаю какие-либо ошибки.
Сначала определите ключ, который выбирает объекты по id:
<xsl:key name="by-id" match="Object" use="@id"/>
Теперь определите рекурсивный шаблон для печати логических предков узел:
<xsl:template match="Object" mode="ancestors">
<xsl:copy-of select="."/>
<xsl:apply-templates select="key('by-id', @parent-id)" mode="ancestors"/>
</xsl:template>
и теперь вызывайте его для выбранных элементов:
<xsl:template match="/">
<root>
<xsl:apply-templates select="root/Object[@status='0']" mode="ancestors"/>
</root>
</xsl:template>
Не проверено.