2012-05-16 6 views
0

나는 소스 XML 다음 한 나무와 노드를 대체 내가 다음에 변환하기 위해 노력하고있어XSLT는 -

<forms> 
    <x> 
    <y> 
     <x-component select="foobar" /> 
    </y> 
    </x> 


    <component name="foobar"> 
    <some> 
     <component> 
      <value>text</value> 
     </component> 
    </some> 
    </component> 
</forms> 

:

<?xml version="1.0" encoding="UTF-8"?> 
<forms> 
    <x> 
     <y> 
      <component name="foobar"> 
       <some> 
        <component> 
         <value>text</value> 
        </component> 
       </some> 
      </component> 
     </y> 
    </x> 
</forms> 

내 XSL 파일이

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

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 

    <xsl:template match="x-component"> 
     <yoba> 
      <xsl:attribute name="z"> 
       <xsl:value-of select="@select"/> 
      </xsl:attribute> 
      <xsl:apply-templates select="/forms/component[@[email protected]]/*" /> 
     </yoba> 
    </xsl:template> 

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

    <xsl:template match="/"> 
     <xsl:apply-templates select="*"/> 
    </xsl:template> 
</xsl:stylesheet> 
입니다

현재 n의 select 속성 값을 전달하려면 어떻게해야합니까? 이 줄에 대한 ode (자리 표시 자 대신) :

<xsl:apply-templates select="/forms/component[@name=<PLACEHOLDER>]/*" /> 
+0

XSLT는 예상 출력에없는 ** yoba ** 요소를 출력합니다. 이 올바른지? –

+0

그게 디버깅을위한, yoba와 출력을 가지고 있지만 yoba 내부의 xsl : apply-templates가 렌더링되지 않았습니다 – Kerb

답변

2

current()/@select을 사용하십시오. 또는 <xsl:key name="k1" match="component" use="@name"/> 키와 <xsl:apply-templates select="key('k1', @select)"/> 키를 더 잘 정의하십시오.

+0

감사합니다, 현재()/@ 잘 선택했습니다. – Kerb

관련 문제