XSLTを使用してXMLをHTMLに変換しています。
次のXML構造があります。
<root>
<element>
<subelement>
This is some html text which should be <span class="highlight">displayed highlighted</span>.
</subelement>
</element>
</root>
次のテンプレートを変換に使用します。
<xsl:template name="subelement">
<xsl:value-of select="." />
</xsl:template>
残念ながら、私は<span>
-タグ。
HTMLが正しく表示(強調表示)されるようにそれらを保持する方法はありますか?
現在一致しているノード(含まれているテキストノード)のすべてのコンテンツを取得する正しい方法は次のとおりです。
<xsl:template match="subelement">
<xsl:copy-of select="node()"/>
</xsl:template>
これにより、すべての子孫がコピーされます。
たとえば、<xsl:copy-of...
の代わりに<xsl:value-of...
を使用してみてください。
<xsl:template name="subelement">
<xsl:copy-of select="*" />
</xsl:template>
*
ビットを含む<subelement></subelement>
を使用するのではなく、.
ビットを結果に出力しないようにする<subelement></subelement>
に注意してください。
たとえば、xslスタイルシート:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="root/element">
<output>
<xsl:apply-templates select="subelement"/>
</output>
</xsl:template>
<xsl:template match="subelement">
<xsl:copy-of select="*"/>
</xsl:template>
</xsl:stylesheet>
サンプルxmlファイルに適用すると、次が返されます。
<?xml version="1.0" encoding="UTF-8"?>
<output>
<span class="highlight">displayed highlighted</span>
</output>
<xsl:value-of>
宣言は、要素内のすべてのテキストノードの連結されたコンテンツを順番に取得し、要素をまったく出力しません。
代わりに<xsl:apply-templates>
を使用することをお勧めします。テキストノードが見つかると、コンテンツがそのまま出力されますが、スパンタグを処理してHTMLタグに変換するためのテンプレートを定義する必要があります。そのスパンタグIS htmlタグの場合、厳密に言えば、独自のドキュメント構造とhtmlに個別の名前空間が必要です。