如何使用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>
感谢您的想法
答案 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>