2009-12-09 4 views

답변

8

XSL을 사용하여 새 요소를 만들 수에 따라 : 요소 당신은 아마 할 것 인 무엇인가 당신이 XSLT1.0를 사용하는 경우이

<xsl:template match="*"> 
    <xsl:element name="{concat(upper-case(substring(name(), 1, 1)), substring(name(), 2))}"> 
     <xsl:value-of select="." /> 
    </xsl:element> 
</xsl:template> 

처럼, 당신은 대문자 기능을 사용할 수 없습니다. 대신, 기능을 번역 성가신 와 메이크업해야 할 것

<xsl:element name="{concat(translate(substring(name(), 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), substring(name(), 2))}"> 
+1

'translate'는 비 라틴 문자를 사용하는 태그 이름에 대해 매우 귀찮습니다 :-) – Joey

1

나는 수동 <xsl:element>를 사용할 필요가 추측 다음 짐승 같은 : 요하네스 말했다에서

concat(upper-case(substring(name(), 1, 1)), substring(name(), 2)) 
+1

XSLT 2.0 이전에는'upper-case()'를 사용할 수 없습니다. – Tomalak

+0

예, Tim C가 이미이를 지적했습니다. 나는 그것을 알지 못했지만 어쨌든 일반적인 경우와 다르게 그것을 풀 수는 없다. 번역을하기 위해 몇 킬로 비트를 넣고 싶지 않다면 말이다. – Joey

0

다음은 ASCII 문장에서 CamelCase 이름을 만드는 순수 XLST1 템플릿입니다.

<xsl:template name="Capitalize"> 
    <xsl:param name="word" select="''"/> 
    <xsl:value-of select="concat(
     translate(substring($word, 1, 1), 
      'abcdefghijklmnopqrstuvwxyz', 
      'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), 
     translate(substring($word, 2), 
      'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
      'abcdefghijklmnopqrstuvwxyz'))"/> 
</xsl:template> 
<xsl:template name="CamelCase-recursion"> 
    <xsl:param name="sentence" select="''"/> 
    <xsl:if test="$sentence != ''"> 
     <xsl:call-template name="Capitalize"> 
      <xsl:with-param name="word" select="substring-before(concat($sentence, ' '), ' ')"/> 
     </xsl:call-template> 
     <xsl:call-template name="CamelCase-recursion"> 
      <xsl:with-param name="sentence" select="substring-after($sentence, ' ')"/> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
<xsl:template name="CamelCase"> 
    <xsl:param name="sentence" select="''"/> 
    <xsl:call-template name="CamelCase-recursion"> 
     <xsl:with-param name="sentence" select="normalize-space(translate($sentence, &quot;:;,'()_&quot;, ' '))"/> 
    </xsl:call-template> 
</xsl:template> 
관련 문제