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>
4

1 回答 1

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>
于 2012-07-21T05:00:51.717 回答