вы должны использовать xsl:key
для этого типа проблемы.
Сначала мы должны объявить ключ для целевого узла
<xsl:key name="kSurface" match="surface" use="concat('#', @xml:id)"/>
обратите внимание, что здесь используется функция concat
, к xml: id добавляется #, чтобы ключи выглядели как:
#ktu1-2_i_1_to_10_img
#ktu1-2_i_10_to_30_img
сейчас в этом цикле:
<xsl:for-each select="descendant-or-self::div3[@type='col']/div4[@n]">
мы можем получить доступ к ключу, который соответствует атрибуту @facs
, имея:
<xsl:value-of select="key('kSurface', @facs)/graphic/@url"/>
Вся таблица стилей ниже:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:output omit-xml-declaration="yes"/>
<xsl:key name="kSurface" match="surface" use="concat('#', @xml:id)"/>
<xsl:template match="/">
<xsl:for-each select="descendant-or-self::div3[@type='col']/div4[@n]">
<xsl:value-of select="key('kSurface', @facs)/graphic/@url"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
увидеть это в действии здесь .