1

これが「gimmethecodez」タイプの質問と見なされたが、私の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>

XSLT1.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 に答える