【发布时间】:2022-01-04 15:15:23
【问题描述】:
我想在我的 XML 文件中复制一些节点。该文件旨在发送到打印引擎。它考虑包含一些行的采购订单,并且对于每一行,需要打印多个标签。该数量取决于将为该采购订单接收的项目数量。因此,我想将该特定行的 XML 节点复制 n 次,n 等于特定行中指定的副本数。
我的源 XML:
<?xml version="1.0" encoding="utf-8"?>
<report>
<header>
<purchaseorder>KER123456</purchaseorder>
</header>
<lines>
<line>
<copies>2</copies>
<item>item1</item>
</line>
<line>
<copies>3</copies>
<item>item2</item>
</line>
</lines>
</report>
请求的结果:
<report>
<header>
<purchaseorder>KER123456</purchaseorder>
</header>
<lines>
<line>
<item>item1</item>
</line>
<line>
<item>item1</item>
</line>
<line>
<item>item2</item>
</line>
<line>
<item>item2</item>
</line>
<line>
<item>item2</item>
</line>
</lines>
</report>
我已经在 Stack Overflow 上找到了一个 XSLT 示例: Duplicate element x number of times with XSLT
但不幸的是,我无法让它工作。
我的 XSLT 实验:
<xsl:stylesheet version="2.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="copies">
<xsl:variable name="copies" select="../copies"/>
<xsl:copy-of select="."/>
<xsl:for-each select="1 to .">
<xsl:apply-templates select="$copies" mode="replicate"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="line" mode="replicate">
<line>
<xsl:apply-templates select="@* except @name|node()"/>
</line>
</xsl:template>
<xsl:template match="line"/>
</xsl:stylesheet>
【问题讨论】:
标签: xml xslt duplicates