Вариации по этому вопросу были опубликованы, но я не смог найти ни одного, который касался базового варианта. Я подумал, что было бы хорошо иметь канонический ответ на простейшую версию проблемы. Этот вопрос предполагает xslt 1.0.
У меня есть документ XML, который содержит смешанные узлы, например ::1003
<paragraph>
This is some text that is <bold>bold</bold>
and this is some that is <italic>italicized.</italic>
</paragraph>
Я бы обычно использовал преобразование, которое выглядит примерно так:
<xsl:template match="bold">
<b><xsl:apply-templates/></b>
</xsl:template>
<xsl:template match="italic">
<i><xsl:apply-templates/></i>
</xsl:template>
<xsl:template match="paragraph">
<p><xsl:apply-templates/></p>
</xsl:template>
, который прекрасно работает, пока я не хочу использовать disable-output-escaping = "yes", который является атрибутом xsl: value-of. Есть ли способ выбрать текстовую часть смешанного узла, к которому я могу применить значение, независимое от встроенных узлов?
Это, конечно, не работает, потому что я потерял бы дочерние узлы:
<xsl:template match="paragraph">
<p><xsl:value-of select="." disable-output-escaping="yes"/></p>
</xsl:template>
Я знаю, что тот факт, что я пытаюсь это сделать, вероятно, представляет собой врожденную проблему в способе обработки XML, но большая часть XML создается довольно (наивно) с помощью (доверенного) пользовательского ввода, и я пытаюсь Избегайте большого количества дополнительного кода обработки между формой XML-> XSLT-> HTML (если возможно).