Я пытаюсь скопировать один из вложенных элементов несколько раз.Я искал и наткнулся на XSLT: копировать объект xml несколько раз, увеличивая атрибут и значение .Это близко, но не тот ответ, который я ищу.Это то, что я пытаюсь сделать
Вход XML:
<Company xmlns="http://test.com" >
<Group document="dump" >
<dump>asdfasd</dump>
<dump2>asdfasdf</dump2>
<Person>
<record>1</record>
<dump2>asdfasdf</dump2>
<properties>
<name>John</name>
<number>1</number>
</properties>
</Person>
</Group>
</Company>
И выводить что-то вроде:
<Company xmlns="http://test.com">
<Group document="dump">
<dump>asdfasd</dump>
<dump2>asdfasdf</dump2>
<Person>
<record>1</record>
<dump2>asdfasdf</dump2>
<properties>
<name>John</name>
<number>1</number>
</properties>
</Person>
...
<Person>
<record>n</record>
<dump2>asdfasdf</dump2>
<properties>
<name>John</name>
<number>n</number>
</properties>
</Person>
</Group>
</Company>
С моим xslt:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:t="http://test.com"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pTimes" select="2"/>
<xsl:template match="node()|@*">
<xsl:param name="pPosition" select="1"/>
<xsl:copy>
<xsl:apply-templates select="node()|@*">
<xsl:with-param name="pPosition" select="$pPosition"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="t:Person">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:call-template name="applyNTimes">
<xsl:with-param name="pTimes" select="$pTimes"/>
<xsl:with-param name="pPosition" select="1"/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:template name="applyNTimes">
<xsl:param name="pTimes" select="0"/>
<xsl:param name="pPosition" select="1"/>
<xsl:if test="$pTimes > 0">
<xsl:choose>
<xsl:when test="$pTimes = 1">
<xsl:apply-templates select="*">
<xsl:with-param name="pPosition" select="$pPosition"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="vHalf" select="floor($pTimes div 2)"/>
<xsl:call-template name="applyNTimes">
<xsl:with-param name="pTimes" select="$vHalf"/>
<xsl:with-param name="pPosition" select="$pPosition"/>
</xsl:call-template>
<xsl:call-template name="applyNTimes">
<xsl:with-param name="pTimes" select="$pTimes - $vHalf"/>
<xsl:with-param name="pPosition" select="$pPosition + $vHalf"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
<xsl:template match="t:record">
<xsl:param name="pPosition" select="1"/>
<xsl:copy>
<xsl:value-of select="$pPosition"/>
</xsl:copy>
</xsl:template>
<xsl:template match="t:number">
<xsl:param name="pPosition" select="1"/>
<xsl:copy>
<xsl:value-of select="$pPosition"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Это то, что у меня есть
<Company xmlns="http://test.com">
<Group document="dump">
<dump>asdfasd</dump>
<dump2>asdfasdf</dump2>
<Person position="1">
<record>1</record>
<dump2>asdfasdf</dump2>
<properties>
<name>John</name>
<number>1</number>
</properties>
<record>2</record>
<dump2>asdfasdf</dump2>
<properties>
<name>John</name>
<number>2</number>
</properties>
</Person>
</Group>
</Company>
Как мне предотвратить элемент Person отисчезает при копировании?