<div class="lemma>coaster</div> <div class="sense"> "> <div class="lemma>coaster</div> <div class="sense"> "> <div class="lemma>coaster</div> <div class="sense"> " />

XSLT:class属性=元の要素名を持つdiv要素のすべての要素

私は次の形式でXMLを持っている(しかし、はるかに大きい..)


    coaster
    
        <trans>Untersetzer
    

私がxsl-transformationによって得たいのはこれです:

<div class="entry">
    <div class="lemma>coaster</div>
    <div class="sense">
        <div class="trans">Untersetzer</div>
    </div>
</div>

それほど複雑ではない:すべての要素をclass属性=元の要素名でdiv要素に変換する。 誰も私に、適切なXSLがどのように表示されるべきかのヒントを教えてください。

ありがとう!

0

1 答え

あなたはそれを行うことができます(XSLT 1.0):

<?xml version="1.0" encoding="UTF-8"?>

    
        <div class="{local-name()}">
            
        </div>
    

スタイルシートは、遭遇した属性をスキップすることに注意してください。

コメント後に編集

属性を保持したい場合は、新しい class 属性をスキップするだけです(新しい属性を作成するため)。たとえば、次のようになります。

<?xml version="1.0" encoding="UTF-8"?>

    
        <div class="{local-name()}">
            
        </div>
    
    
        
                        
        
    

3
追加された
また、 attr-class のようなクラス属性をsomithingに出力したい場合はどうすればよいでしょうか?もう少し説明していただけますか?
追加された 著者 Maarten,
元の属性を含めるように答えを更新しました。
追加された 著者 Vincent Biragnet,
2番目のxsltを使用し、クラス属性を最初のテンプレートのattr-class属性に変更し、2番目のテンプレートのif文のtestをname()!= 'attr-class'で変更します。 2番目のテンプレートは、元のXMLファイルに 'attr-class'という名前の属性が存在する場合に問題を回避するためのものです。お役に立てれば。
追加された 著者 Vincent Biragnet,
すばらしいです!どうもありがとう!
追加された 著者 shcnix,