2014-02-05 1 views
0

나는이있는 경우에 내가 할 수있는 일 :XSL :의 가치와 내부 요소에 템플릿을 적용

<e1>t1<e2>t2</e2></e1> 

을 내가에서 XSLT로 번역 할 :

<c1>t1<c2>t2</c2></c1> 

내가 함께 시도했다 :

<xsl:template match="e1"> 
    <c1> 
    <xsl:value-of select="."> 
     <xsl:apply-templates/> 
    </xsl:value-of> 
    </c1> 
</xsl:template> 
<xsl:template match="e2"> 
    <c2> 
    <xsl:value-of select="."/> 
    </c2> 
</xsl:template> 

하지만 값이 비어 있어야합니다.

+0

한 예. 그 모든 것이 * 당신이 가질 수있는 모든 것입니다 : ''부모와'' 자식? –

+0

2.0에서는 다른 오류가 발생하기 때문에 XSLT 1.0을 사용하고있는 것으로 보입니다. XSLT 1.0을 사용하는 경우 SAU이므로 사용중인 버전을 모를 때 XSLT 질문에 대답하기가 매우 어렵습니다. –

+0

답장을 보내 주셔서 감사합니다. xslt 1.0과 2.0을 사용하는 데 차이가 있다는 것을 몰랐습니다. 어쨌든 1.0을 사용하고 있습니다. – testermaster

답변

2

xsl:value-of은 반드시 입력해야합니다. 하지만 그 안에는 아무 것도 필요하지 않습니다. 아래의 스타일 시트는 요소 이름을 e1e2으로 바꾸는 두 가지 예외를 가진 항등 변환입니다.

모든 XML 문서에서 e1e2을 대체하고 나머지는 그대로 둡니다.

스타일 시트

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

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

    <xsl:output method="xml" indent="yes"/> 

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

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

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

</xsl:stylesheet> 

출력 규칙을하지 않습니다

<?xml version="1.0" encoding="UTF-8"?> 
<c1>t1<c2>t2</c2></c1> 
+0

두 가지 예외는 주어진 예제의 모든 것을 다룹니다. 처리 할 것이없는 규칙은 그대로 둡니다. –

+0

알겠습니다. 입력 XML은 'e1'과'e2' 이외의 다른 콘텐츠가있을 수있는 빼놓을 수없는 샘플 일 수 있습니다. –

관련 문제