2017-10-31 11 views
0

文書のテキストから新しい要素を生成するためのテンプレートを作成しようとしています。 XML入力はxslt - テキストからノードを作成する

<c> 
    <a>foo</a> 
    <b>bar</b> 
</c> 

ある場合たとえば、私は次のような出力を生成するスタイルシートを作成したい:

<c> 
    <a><el att="foo"></a> 
    <b><el att="bar></b> 
</c> 

私は、次のテンプレート

<xsl:template match="text()"> 
<xsl:element name="el"> 
    <xsl:attribute name="att"><xsl:value-of select="text()"/></xsl:attribute> 
</xsl:element> 
</xsl:template> 

を書くしかし、試合は」doesnの「テキスト」とは、タグの終わりと他のタグの先頭の間のスペースでもあり、属性の値は設定されません。誰か助けてくれますか?ありがとうございます

答えて

1

xsl:strip-spaceを使用して、重要でない空白を無視してみてください。

はまた、あなたのテンプレートであなたのコンテキストがすでにtext()ので、.short for self::node())を使用するか、またはnormalize-space()

(わずかにAVTを使用することによって簡略化)実施例...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="text()" priority="1"> 
    <el att="{.}"/> 
    </xsl:template> 

</xsl:stylesheet> 
+0

@ user8864215 - ''のように 'normalize-space()'を使います。私は自分の答えを更新しました。あいまいなテンプレートマッチを解決するために 'priority'属性を追加しました。 –

関連する問題