移动元素shortdesc

时间:2017-07-14 06:53:30

标签: xslt

如何使用xslt转换在元素h1之后定位元素shortdesc。 目前,我通过以下代码获取每个元素的内容。

<xsl:template match="shortdesc" mode="body">       
   <shortdesc>
      <xsl:apply-templates mode="body"/>
   </shortdesc>
</xsl:template>
<xsl:template match="p" mode="body">       
   <p>
      <xsl:apply-templates mode="body"/>
   </p>
</xsl:template>
<xsl:template match="h1" mode="body">      
   <h1>
      <xsl:apply-templates mode="body"/>
   </h1>
</xsl:template>

源文件

<topic>    
   <h1>text</h1>
   <p>text</p>
   <p>text</p>
   <shortdesc>text</shortdesc>
   <p>text</p>
   <p>text</p>
</topic>

目标文件(转换后应该如此)

<topic>
   <h1>text</h1>
   <shortdesc>text</shortdesc>
   <p>text</p>
   <p>text</p>
   <p>text</p>
   <p>text</p>
</topic>

感谢您的想法

2 个答案:

答案 0 :(得分:0)

你可以使用:

来做到这一点
<xsl:template match="h1" mode="body">      
   <h1>
      <xsl:apply-templates mode="body"/>
   </h1>
   <xsl:apply-templates select="../shortdesc" mode="desc"/>
</xsl:template>

<xsl:template match="shortdesc" mode="body"/>
<xsl:template match="shortdesc" mode="desc">       
   <shortdesc>
      <xsl:apply-templates mode="body"/>
   </shortdesc>
</xsl:template>

和btw,你不想用这样的东西替换你的模板:

<xsl:template match="*" mode="body">
    <xsl:element name="{name()}">
      <xsl:apply-templates mode="body"/>
    </xsl:element>
</xsl:template>

答案 1 :(得分:0)

为简化手头问题的示例,给出以下输入:

<强> XML

<topic>    
   <h1>text</h1>
   <p>text</p>
   <p>text</p>
   <shortdesc>text</shortdesc>
   <p>text</p>
   <p>text</p>
</topic>

以下样式表:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/topic">       
   <xsl:copy>
        <xsl:apply-templates select="h1"/>
        <xsl:apply-templates select="shortdesc"/>
        <xsl:apply-templates select="p"/>
   </xsl:copy>
</xsl:template>

<xsl:template match="h1 | shortdesc | p">      
   <xsl:copy>
      <xsl:apply-templates/>
   </xsl:copy>
</xsl:template>

</xsl:stylesheet>

将返回:

<强>结果

<?xml version="1.0" encoding="UTF-8"?>
<topic>
  <h1>text</h1>
  <shortdesc>text</shortdesc>
  <p>text</p>
  <p>text</p>
  <p>text</p>
  <p>text</p>
</topic>