我需要根据具有最大元素数量的兄弟节点在一个或多个节点中插入“占位符”元素。
这就是我所拥有的:
<main>
<program>
<product>1</product>
<product>2</product>
<product>3</product>
</program>
<program>
<product>1</product>
</program>
这就是我想要的:
<main>
<program>
<product>1</product>
<product>2</product>
<product>3</product>
</program>
<program>
<product>1</product>
<product>dummy</product>
<product>dummy</product>
</program>
如您所见,XLST应将两个虚拟元素插入第二个节点,因为兄弟节点有三个元素。如何使XSLT将虚拟元素插入到元素数量较少的节点中?
谢谢。
答案 0 :(得分:2)
这应该是一个有效的XSLT 2.0解决方案:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:variable name="countMax" select="max(//program/count(product))" />
<main>
<xsl:for-each select="/main/program">
<xsl:variable name="currentCount" select="count(./product)" />
<program>
<xsl:for-each select="./product">
<product><xsl:value-of select="." /></product>
</xsl:for-each>
<xsl:for-each select="$currentCount+1 to $countMax">
<product><xsl:text>dummy</xsl:text></product>
</xsl:for-each>
</program>
</xsl:for-each>
</main>
</xsl:template>
</xsl:stylesheet>
但可能会有更好的答案。