#xml #xslt #xslt-1.0
#xml #xslt #xslt-1.0
Вопрос:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
type="text/xsl" href="helpxslt.xsl" ?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="helpschema.xsd" >
<line>
This is a paragraph <b> of text</b> I only want some of it bold.
</line>
Итак, это XML
<xsl:for-each select="page/line">
<p class="bodytext">
<xsl:value-of select="."/>
<xsl:call-template name="Newline"/>
</p>
</xsl:for-each>
<xsl:for-each select="page/line/b">
<b>
<xsl:value-of select="."/>
</b>
</xsl:for-each>
</xsl:template>
это XLST.
Почему это не будет работать? Он просто вставляет текст дважды. 🙁
Ответ №1:
<xsl:for-each select="page/line">
<p class="bodytext">
<xsl:copy-of select="node()"/>
<xsl:call-template name="Newline"/>
</p>
</xsl:for-each>
Ответ №2:
xsl:value-of
Инструкция извлекает исходный текст того, что вы выбираете, отбрасывая всю разметку. Вы хотите xsl:copy-of
.
Более конкретно, попробуйте научиться кодировать этот «способ XSLT», выполняя рекурсивный спуск на основе правил с xsl:apply-templates
и шаблонными правилами. Это гораздо более подходящий способ обработки смешанного содержимого, чем использование квазипроцедурных конструкций, таких как xsl:for-each и xsl:choose.