XSLT - 移动子ID和父ID属性,并在字符串中的数字后删除双空格

时间:2017-10-26 05:47:13

标签: xml xslt

我的输入xml就像,

<section level="2">
<title>1.  Wound Healing<target id="c001"/><target id="page3"/></title>
<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 counter="yes">
<legend><para><emph type="bold">Fig. 1-2</emph> Keloid scar.</para></legend>
<subfigure>
<graphic id="c001_f002" position="center" fileref="images/9781626237896_c001_f002.jpg"/>
</subfigure>
</figure>
........
</section>

必需输出为,

<section level="2">
<title>1. Wound Healing<target id="c001"/><target id="page3"/></title>
<figure counter="yes">
<legend><para><emph type="bold">Fig. 1-1</emph> Hypertrophic scar.</para>   </legend>
<subfigure id="c001_f001">
<graphic position="center" fileref="images/9781626237896_c001_f001.jpg"/>
</subfigure>
</figure>
<figure counter="yes">
<legend><para><emph type="bold">Fig. 1-2</emph> Keloid scar.</para></legend>
<subfigure id="c001_f002">
<graphic position="center" fileref="images/9781626237896_c001_f002.jpg"/>
</subfigure>
</figure>
........
</section>

我的xslt就像,

<xsl:template match="subfigure">
<xsl:variable name="fig1" select="parent::figure/@id"></xsl:variable>      
<xsl:copy>     
<xsl:apply-templates select="@*"/>            
<xsl:attribute name="id">
<xsl:value-of select="$fig1"></xsl:value-of>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>          
<xsl:when test="subfigure/@id[not(contains(.,'c'))]">
<xsl:if test="subfigure/@id[not(contains(.,'c'))]">
<xsl:variable name="fig1" select="graphic/@id"></xsl:variable>
<xsl:copy>    
<xsl:apply-templates select="@*"/>
<xsl:attribute name="id">
<xsl:value-of select="$fig1"></xsl:value-of>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>            
</xsl:if>
</xsl:when> 
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

上面提到的XSLT只是将图形ID移动到子图元素中。但我们无法将图形ID移动到子图元素中。 Alos,我们需要删除在“1.”数字后出现在元素中的双空格。你能指导我们吗?

1 个答案:

答案 0 :(得分:1)

从您的其他帖子(visit here for more detail)中的解决方案开始,您可以应用相同的方法,反之亦然:

<title>

对于{{1}}内的空格控制,您可以直接在文本节点上工作(如果您还需要在其他元素上执行此操作,则只需展开xpath表达式。)