У меня есть xml, который выглядит примерно так
<para>
text text text
<b>text</b> text text <i>text</i>
</para>
цель - преобразовать это в формат mediaWiki с помощью '' 'для жирного шрифта и т. Д.
когда я пишу преобразование для этого, совпадение шаблона игнорирует весь текст внутри тега <para>
, и только <b>
s и <i>
s преобразуются. Мне нужна помощь.
обновление: вот что я пробовал до сих пор:
это то, что я пробовал до сих пор.
<xsl:template match="para">
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="b">
<xsl:text>'''</xsl:text><xsl:value-of select="replace(replace(.,'\s+$',''),'^\s+','')" disable-output-escaping="no"/><xsl:text>'''</xsl:text>
</xsl:template>
<xsl:template match="i">
<xsl:text>''</xsl:text><xsl:value-of select="replace(replace(.,'\s+$',''),'^\s+','')" disable-output-escaping="no"/><xsl:text>''</xsl:text>
</xsl:template>
Это то, что я использовал, когда попробовал функцию text ().
<xsl:template match="text()">
<xsl:value-of select="." disable-output-escaping="no"/>
</xsl:template>
- update--
чтобы не терять пробелы до и после текстового блока, а также флажков, выделенных жирным шрифтом и курсивом, мы также можем проверить пробелы до и после текста.
<xsl:template match="text()">
<xsl:variable name="originalText" select="."/>
<xsl:if test="starts-with($originalText,' ')">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="normalize-space(.)" disable-output-escaping="no"/>
<xsl:if test="ends-with($originalText,' ')">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:template>