以下是我在XML中的内容:
<par level="4">Hi </par>
<par level="4">There!</par>
<par level="12">abcd :</par>
<par level="12">efgh .</par>
<par level="4">azert</par>
<par level="4">yuio</par>
<par level="4">p</par>
<par level="4">)</par>
当我读取PAR元素时,我想在同一个DIV中连接内容,直到LEVEL属性仍然与前一个相同。但如果LEVEL改变,我需要创建一个新的DIV。内容顺序不必更改,因此第一个“级别4”PAR不必与第二个合并。除了我提到的最后一点,我已经看到了类似的问题。
所以这是我在上面的示例的xsl转换后想要的东西:(XSLT 1.0)
<div class="level4">
Hi there!
</div>
<div class="level12">
abcd :efgh .
</div>
<div class="level4">
azertyuiop)
</div>
我已经有一个模板xsl:template match =“par”&gt;里面有很多代码。 你有什么建议来实现这个目标?
答案 0 :(得分:0)
你可以这样做:
XML输入(已修改为格式正确)
<doc>
<par level="4">Hi </par>
<par level="4">There!</par>
<par level="12">abcd :</par>
<par level="12">efgh .</par>
<par level="4">azert</par>
<par level="4">yuio</par>
<par level="4">p</par>
<par level="4">)</par>
</doc>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="par[not(@level = preceding-sibling::par[1]/@level)]">
<div class="level{@level}">
<xsl:value-of select="."/>
<xsl:apply-templates select="(following-sibling::par[1])[@level=@level]" mode="dump"/>
</div>
</xsl:template>
<xsl:template match="par[preceding-sibling::par[1]/@level=@level]"/>
<xsl:template match="par" mode="dump">
<xsl:value-of select="."/>
<xsl:if test="following-sibling::par[1]/@level = @level">
<xsl:apply-templates select="following-sibling::par[1]" mode="dump"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<doc>
<div class="level4">Hi There!</div>
<div class="level12">abcd :efgh .</div>
<div class="level4">azertyuiop)</div>
</doc>