2012-07-21 66 views
1

道歉,如果這被看作是「給我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 2012-07-21 06:17:43