用兄弟内容替换空元素

时间:2012-07-21 04:47:51

标签: xslt xpath

道歉,如果这被视为“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 个答案:

答案 0 :(得分: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>
相关问题