<xsl:template match="*" mode="set-output-class">
шаблон возвращает attribute()?
.Поэтому, если вы хотите получить этот результат как есть, будет работать следующий код в шаблоне <xsl:template match="/*[df:class(., 'map/map')]">
:
<xsl:variable name="classAttr" as="attribute()?">
<xsl:apply-templates select="." mode="set-output-class"/>
</xsl:variable>
Или, если вы хотите получить строковое значение:
<xsl:variable name="classValue" as="xs:string" select="string($classAttr)"/>
будетбудет достаточно.
мне нужно значение атрибута классов вывода файла темы для просмотра
Я не уверен в преобразовании EPUB.Но следующий код может быть одним из решений.
<xsl:variable name="topicOutputClasses" as="attribute()*">
<xsl:for-each select="*[contains(@class,' map/topicref ')][exists(@href)]">
<xsl:variable name="topicRef" as="element()" select="."/>
<xsl:variable name="href" as="xs:string" select="$topicRef/@href/string(.)"/>
<xsl:variable name="topicDoc" as="document-node()" select="document($href,$topicRef)"/>
<xsl:sequence select="$topicDoc/*[contains(@class,' topic/topic ')]/@outputclass"/>
</xsl:for-each>
</xsl:variable>
как сравнить конкретный выходной класс со всеми выходными классами
Изменение предыдущей переменной как xs: string* сделает возможным использование в вашем xsl: когда / @ test как положено.
<xsl:variable name="outputclasse" as="xs:string*">
<xsl:for-each select="descendant::*[contains(@class,' map/topicref ')][exists(@href)]">
<xsl:variable name="topicRef" as="element()" select="."/>
<xsl:variable name="href" as="xs:string" select="$topicRef/@href/string(.)"/>
<xsl:variable name="topicDoc" as="document-node()" select="document($href,$topicRef)"/>
<xsl:sequence select="$topicDoc/*[contains(@class,' topic/topic ')]/@outputclass/string(.)"/>
</xsl:for-each>
</xsl:variable>
Вы можете использовать эту переменную с общим оператором сравнения "=", например так:
<xsl:when test="$outputclass = 'Ram-Files-RajRFR'">
он не извлекает значение внутри h1, используя это <h1><xsl:value-of select="//topic[@outputclass='Ram-Files-RajRFR']"/></h1>
Если вам удалось получить значение @outputclass из файлов тем, следующий код также будет работать.
[Переменные в шаблоне карты]
<xsl:variable name="outputclasses" as="xs:string*">
<xsl:for-each select="descendant::*[contains(@class,' map/topicref ')][exists(@href)]">
<xsl:variable name="topicRef" as="element()" select="."/>
<xsl:variable name="href" as="xs:string" select="$topicRef/@href/string(.)"/>
<xsl:variable name="topicDoc" as="document-node()" select="document($href,$topicRef)"/>
<xsl:if test="exists($topicDoc/*[contains(@class,' topic/topic ')]/@outputclass)">
<xsl:sequence select="$topicDoc/*[contains(@class,' topic/topic ')]/@outputclass/string(.)"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="topicHrefs" as="xs:string*">
<xsl:for-each select="descendant::*[contains(@class,' map/topicref ')][exists(@href)]">
<xsl:variable name="topicRef" as="element()" select="."/>
<xsl:variable name="href" as="xs:string" select="$topicRef/@href/string(.)"/>
<xsl:variable name="topicDoc" as="document-node()" select="document($href,$topicRef)"/>
<xsl:if test="exists($topicDoc/*[contains(@class,' topic/topic ')]/@outputclass)">
<xsl:sequence select="$href"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
[Получить содержимое темы]
<ul>
<li>
<xsl:choose>
<xsl:when test="$outputclasses = 'Ram-Files-RajRFR'">
<xsl:variable name="index" as="xs:integer" select="index-of($outputclasses,'Ram-Files-RajRFR')"/>
<xsl:variable name="href" as="xs:string" select="$topicHrefs[$index]"/>
<xsl:variable name="topicDoc" as="document-node()" select="document($href,.)"/>
<xsl:value-of select="$topicDoc/*[contains(@class,' topic/topic ')]"/>
</xsl:when>
</xsl:choose>
</li>
</ul>
Этот код является избыточным.Вы можете настроить его так, как вам нравится.