我有以下情况:
我的根文档中将有以下多个标记。
<imagelist>
...
<imgp-src>0020104314-01-1.jpg</imgp-src>
<img-src>0020104314-01-2.jpg</img-src>
<img-src>0020104314-01-3.jpg</img-src>
<imgp-src>0020104314-01-4.jpg</imgp-src>
...
</imagelist>
无论源标记(img或imgp)
,我都需要以下结果<img_url1>0020104314-01-1.jpg</img_url1>
<img_url2>0020104314-01-2.jpg</img_url2>
<img_url3>0020104314-01-3.jpg</img_url3>
<img_url4>0020104314-01-4.jpg</img_url4>
我尝试使用for-each循环和position函数来创建新元素。我在每一次尝试中都失败了。
请注意,标记可以以img或imgp开头。 我需要用顺序标识符命名结果元素。 我可以重命名该值,但似乎无法重命名该元素。
有人能指出我正确的方向。
如果这是一个反复出现的问题,我会提前道歉。我以为我之前已经看过这个问题,但似乎无法找到答案。
谢谢。
答案 0 :(得分:2)
使用类似
的方法<xsl:template match="imagelist">
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="imagelist/*">
<xsl:element name="img_url{position()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
答案 1 :(得分:1)
如果您删除空格,可以使用position()
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="imgp-src | img-src">
<xsl:element name="img_url{position()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
这假设您在imagelist
中没有其他元素。如果你这样做,他们也将被计算在内,你的编号将会有所不同。使用<xsl:number>
更安全,因为您可以准确选择要计算的节点(并且不必使用strip-space
):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="imgp-src | img-src">
<xsl:variable name="number">
<xsl:number count="imgp-src | img-src"/>
</xsl:variable>
<xsl:element name="img_url{$number}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>