2012-02-06 116 views
0

元素我有下面的形式的XML(但更大..)XSLT:所有元素的DIV class属性=原始元素名称

<entry> 
    <lemma>coaster</lemma> 
    <sense> 
     <trans>Untersetzer</trans> 
    </sense> 
</entry> 

我想通过XSL变换得到什么是这样的:

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

没有那么复杂:转换所有元素分度,类属性=原始的元素名称元素。 任何人都可以给我一个提示如何一个合适的XSL应该看起来像?

谢谢!

回答

3

你可以做到这一点(XSLT 1.0):

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 
    <xsl:template match="*"> 
     <div class="{local-name()}"> 
      <xsl:apply-templates/> 
     </div> 
    </xsl:template> 
</xsl:stylesheet> 

注意,样式跳过它遇到的属性。评论

如果你想保留的属性后

编辑,你只需要跳过任何class属性(因为你创建一个新的)。例如像这样:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 
    <xsl:template match="*"> 
     <div class="{local-name()}"> 
      <xsl:apply-templates select="node()|@*"/> 
     </div> 
    </xsl:template> 
    <xsl:template match="@*"> 
     <xsl:if test="name() != 'class'"> 
      <xsl:copy-of select="."/>    
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 
+1

我已经更新了答案以包含原始属性。 – 2012-02-06 16:09:31

+0

太棒了!非常感谢! – shcnix 2012-02-06 16:11:25

+0

如果你想输出类属性像'attr-class'一样喜欢什么呢?你还可以解释一下吗? – Maarten 2013-04-14 10:52:13