2012-03-16 3 views
1

나는 요소의 값의 일부를 추출하고 그것을 속성으로 지정하려고합니다.XSLT에서 내용의 일부를 추출하는 방법

소스 :

<www> 
     <sss> 
      <eee>XML ELEMENT VALUE 
      [part].HTML element value [HTPART]. 
       HTML element value [HTPART2]. 
      </eee> 
    </sss> 
</www> 

이 여러 번 올 수 대괄호 []에 이걸 봐 내용과 같이 계속됩니다. 그리고 소스에 많은 여분의 공간이 있습니다. 여분의 공백을 제거하고 이와 같은 내용을 표시하고 싶습니다.

출력 REQ :

 <fff>XML ELEMENT VALUE<ggg name="part"/>.HTML element value<ggg name="HTPART"/>.HTML element value<ggg name="HTPART2"/>. </fff> 

어느 한이 작업을 수행하는 방법을 제안 할 수 있습니다. XSLT를 처음 사용합니다.

미리 감사드립니다.

+0

는 XSLT 당신이 사용할 수있는 유일한 도구인가? 이것은 XSLT 밖에서 훨씬 더 간단하기 때문입니다. – Tomalak

+0

예 .. 저는 XSLT 만 사용하고 있으며 XSLT 만 지원합니다. – Patan

답변

2

문자열 처리는 XSLT의 강력한 측면이 아닙니다. XML 처리 언어이므로 결국 범용 언어가 아닙니다.

귀하의 문제가 있지만, 재귀를 통해 해결 될 수있다 :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="eee"> 
    <fff> 
     <xsl:call-template name="process"> 
     <xsl:with-param name="text" select="text()" /> 
     </xsl:call-template> 
    </fff> 
    </xsl:template> 

    <xsl:template name="process"> 
    <xsl:param name="text" select="''" /> 

    <xsl:variable name="head" select="substring-before($text, '[')" /> 
    <xsl:variable name="tag" select="substring-before(substring-after($text, '['), ']')" /> 
    <xsl:variable name="tail" select="substring-after($text, ']')" /> 

    <xsl:choose> 
     <xsl:when test="$head != '' and $tag != ''"> 
     <xsl:value-of select="$head" /> 
     <ggg name="{$tag}" /> 
     <!-- recursive step: process the remainder of the string --> 
     <xsl:call-template name="process"> 
      <xsl:with-param name="text" select="$tail" /> 
     </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:value-of select="$text" /> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 

위의 템플릿 출력을, 당신의 입력 :

<fff>XML ELEMENT VALUE 
<ggg name="part"/>.HTML element value <ggg name="HTPART"/>. 
    HTML element value <ggg name="HTPART2"/>. 
</fff> 
관련 문제