2009-11-18 9 views
7

次のxmlに適用すると、<xsl:copy-of select="tag"/>の代わりにどのようなコードを使用できますか?xsl:親を除いたコピー

<tag> 
    content 
    <a> 
    b 
    </a> 
</tag> 

..次の結果が得られますか?

content 
<a> 
    b 
</a> 
親タグを除外したい


基本的に私はxmlタグでグループ化された、HTMLでフォーマットされたXMLファイルにいくつかのセクションのコンテンツを持っています
&条件付きでそれらにアクセスしたい&
<xsl:copy-of select="description"/>
生成された余分な親タグはブラウザのレンダリングには影響しませんが、無効なタグ&を削除できます。
私はまったく間違ったやり方でこれについて行きますか?

答えて

12

あなたにもcontent部分を含めたいので、あなたが*オペレータ、node()機能がない必要があります:私は入力の例でこれをテストしてみた結果は

<xsl:copy-of select="tag/node()"/> 

例の結果:ルート・ノード名をハードコーディングすることなく

content 
<a> 
    b 
</a> 

、これは指定できます

<xsl:copy-of select="./node()" /> 

これは、ルートノードを既に処理していて、ルートノードを除いて、すべての要素の正確なコピーが必要な場合に便利です。たとえば:

<xsl:variable name="head"> 
    <xsl:copy-of select="document('head.html')" /> 
</xsl:variable> 
<xsl:apply-templates select="$head" mode="head" /> 

<!-- ... later ... --> 

<xsl:template match="head" mode="head"> 
    <head> 
    <title>Title Tag</title> 
    <xsl:copy-of select="./node()" /> 
    </head> 
</xsl:template> 
3

は私の票を持っているWelbogの答えを、補完するものとして、私はこの線に沿って、別のテンプレートを書いてお勧めします。

<xsl:template match="/"> 
    <body> 
    <xsl:apply-templates select="description" /> 
    </body> 
</xsl:template> 

<xsl:template match="description"> 
    <div class="description"> 
    <xsl:copy-of select="node()" /> 
    </div> 
</xsl:template> 
関連する問題