Этот вопрос аналогичен: использование XSLT для создания XSL-FO с вложенными жирным/курсивом тегами
Тем не менее, я хочу знать, есть ли способ обрабатывать (ссылаться) текст, который находится вне вложенного элемента. Например, если я использую это:
<xsl:apply-templates select="." mode="handle-emphasis" />
Чтобы "вызвать" следующие шаблоны:
<xsl:template match="p/emphasis[@type='italic']" mode="handle-emphasis">
<xsl:element name="i">
<xsl:value-of select="text()" />
</xsl:element>
</xsl:template>
<xsl:template match="p/emphasis[not(@type='italic')]" mode="handle-emphasis">
<xsl:element name="b">
<xsl:value-of select="text()" />
</xsl:element>
</xsl:template>
<xsl:template match="p/br" mode="handle-emphasis">
<xsl:element name="br" />
</xsl:template>
Затем я могу успешно обрабатывать некоторые пользовательские теги, которые очень похожи на HTML полужирным и курсивом. Однако, если я создаю шаблон, который соответствует только "p", похоже, что шаблон не выполняется для текста, "вне" "жирного" и "курсивного" узлов.
Я, вероятно, пропустил что-то простое, но это сводит меня с ума. Любые идеи очень ценятся.
Похоже, вы хотели, чтобы у вас был шаблон, шаблон соответствия которого был p/text()
.
<i>
вместо<xsl:element name="i">
и почему вы не продолжаете обработку внутри вашего шаблона, выполняя<xsl:apply-templates mode="handle-emphasis"/>
вместо<xsl:value-of select="text()" />
.