2012-07-21 4 views
1

"gimme the codez"유형의 질문으로 간주되지만 내 xpath 기술이이 문제를 해결하지 못하면 사과드립니다. 제 의견으로는 더 많은 사람들이 관심을 가질 정도로 충분히 있습니다.빈 요소를 형제 콘텐츠로 대체하십시오.

이 다국어 XML 파일은 다음과 같습니다. 빈 네덜란드어 항목을 영어 형제 요소로 대체해야합니다.

입력 :

<Testing> 
    <T4 t="dutch"></T4> 
    <T4 t="english">Testing Software</T4> 
    <T4 t="french"/> 
    <T4 t="italian"/> 
</Testing> 
<P> 
    <T1 t="dutch"></T1> 
    <T1 t="english">Testing Phase. </T1> 
    <T1 t="french"></T1> 
    <T1 t="italian"></T1> 
</P> 

출력 :

<Testing> 
    <T4 t="dutch"> 
    <trans>Testing Software</trans> 
    </T4> 
    <T4 t="english">Testing Software</T4> 
    <T4 t="french"/> 
    <T4 t="italian"/> 
</Testing> 
<P> 
    <T1 t="dutch"><trans>Testing Phase.</trans></T1> 
    <T1 t="english">Testing Phase. </T1> 
    <T1 t="french"></T1> 
    <T1 t="italian"></T1> 
</P> 

답변

1

이 작동해야 ...

XML 입력

( input 래핑이 잘 형성 될)

<input> 
    <Testing> 
     <T4 t="dutch"></T4> 
     <T4 t="english">Testing Software</T4> 
     <T4 t="french"/> 
     <T4 t="italian"/> 
    </Testing> 
    <P> 
     <T1 t="dutch"></T1> 
     <T1 t="english">Testing Phase. </T1> 
     <T1 t="french"></T1> 
     <T1 t="italian"></T1> 
    </P> 
</input> 

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="*[@t='dutch'][not(node())]"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*"/> 
      <trans><xsl:value-of select="normalize-space(../*[@t='english'])"/></trans> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

출력

<input> 
    <Testing> 
     <T4 t="dutch"> 
     <trans>Testing Software</trans> 
     </T4> 
     <T4 t="english">Testing Software</T4> 
     <T4 t="french"/> 
     <T4 t="italian"/> 
    </Testing> 
    <P> 
     <T1 t="dutch"> 
     <trans>Testing Phase.</trans> 
     </T1> 
     <T1 t="english">Testing Phase. </T1> 
     <T1 t="french"/> 
     <T1 t="italian"/> 
    </P> 
</input> 
+0

덕분에, 나는 살펴볼 것이다 - 아마도 당신이 날이 바이올린에 XSLT를 추가 할 수 있습니다? 나는 iPad에만 접근 할 수 있고 jsfiddle에서 XML을 변형시키지 않았다. http://jsfiddle.net/mplungjan/azrRV/ – mplungjan

관련 문제