如何使用 xslt 转换将元素 shortdesc 定位在元素 h1 之后。 目前,我通过以下代码获取每个元素的内容。
<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>
谢谢你的想法
您可以使用以下方法做到这一点:
<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>
顺便说一句,你不想用这样的东西替换你的模板吗:
<xsl:template match="*" mode="body">
<xsl:element name="{name()}">
<xsl:apply-templates mode="body"/>
</xsl:element>
</xsl:template>
?
为了将示例简化为手头的问题,给定以下输入:
.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>