2017-10-23 14 views
0

私の入力XMLはXSLT - 親要素上記移動子要素

<figure id="c001_f001" counter="yes"> 
<subfigure> 
<graphic position="center" fileref="images/9781626237896_c001_f001.jpg"/> 
<legend><para><emph type="bold">Fig. 1-1</emph>Hypertrophic scar.</para></legend> 
</subfigure> 
</figure> 
...... 
...... 
<figure id="c001_f002" counter="yes">  
<subfigure> 
<graphic position="center" fileref="images/9781626237896_c001_f002a.jpg"/> 
</subfigure> 
<subfigure> 
<graphic position="center" fileref="images/9781626237896_c001_f002b.jpg"/> 
<legend><para><emph type="bold">Fig. 1-2</emph>Keloid scar.</para></legend> 
</subfigure> 
</figure> 

出力は、

<figure id="c001_f001" counter="yes"> 
<legend><para><emph type="bold">Fig. 1-1</emph>Hypertrophic scar.</para></legend> 
<subfigure> 
<graphic position="center" fileref="images/9781626237896_c001_f001.jpg"/> 
</subfigure> 
</figure>....... 
<figure id="c001_f002" counter="yes">  
<legend><para><emph type="bold">Fig. 1-2</emph>Keloid scar.</para></legend> 
<subfigure> 
<graphic position="center" fileref="images/9781626237896_c001_f002a.jpg"/> 
</subfigure> 
<subfigure> 
<graphic position="center" fileref="images/9781626237896_c001_f002b.jpg"/> 
</subfigure> 
</figure> 

XSLTのように書いてきた、

<xsl:template match="subfigure"> 
<xsl:copy-of select="legend"/> 
<xsl:copy> 
<xsl:apply-templates select="node() except legend"/> 
</xsl:copy> 
</xsl:template> 

ながらでなければならず、そのようなものです上記のxslt "凡例"要素を使用して、第1のインスタンスに対して適切に表示されます。 2番目のインスタンスの場合、2つの "サブ図形"要素の間に表示されます。しかし、要素の下には「凡例」要素を表示する必要があります。この問題を解決するために私たちを導いてください。

答えて

0

<legend>は、<figure>の子にする必要があります。これは次のテンプレートで行うことができます。

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

そして<legend>

<xsl:template match="subfigure"> 
    <xsl:copy> 
     <xsl:apply-templates select="*[not(self::legend)]" /> 
    </xsl:copy> 
</xsl:template> 
によって行うことができる <subfigure>から削除する必要があります
関連する問題