Мне нужно продублировать полезную нагрузку xml на столько полезных нагрузок xml на основе определенного идентификатора, например, ID пользователя
<ns2:Details xmlns:ns2="ns">
<ns2:var1>AA0511201143</ns2:var1>
<ns2:var2>PARCEL</ns2:var2>
<ns2:var3>04/04/2011</ns2:var3>
<ns2:var4>Organization</ns2:var4>
<ns2:UserId>46</ns2:UserId>
<ns2:UserId>237</ns2:UserId>
</ns2:Details>
мне нужен вывод как
<ns2:Details>
<ns2:var1>AA0511201143</ns2:var1>
<ns2:var2>PARCEL</ns2:var2>
<ns2:var3>04/04/2011</ns2:var3>
<ns2:var4>Organization</ns2:var4>
<ns2:UserId>46</ns2:UserId>
</ns2:Details>
<ns2:Details>
<ns2:var1>AA0511201143</ns2:var1>
<ns2:var2>PARCEL</ns2:var2>
<ns2:var3>04/04/2011</ns2:var3>
<ns2:var4>Organization</ns2:var4>
<ns2:UserId>237</ns2:UserId>
</ns2:Details>
это возможно
Обновление: Приведенный ниже ответ работает нормально, но есть небольшая загвоздка, которую я не упомянул. Если идентификатор пользователя тот же, и он повторяется, то должна отображаться та же полезная нагрузка xml. Для этого я попробовал следующее, чтобы получить уникальные элементы userid
<xsl:param name="userId" select="ns0:UserId[generate-id(.)=generate-id(key('k', ns0:UserId)[1])]"/>
но это не работает, а также попытался использовать выше
..[generate-id(.)=generate-id(key('k', ns0:UserId)[1])]
на уровне шаблона также не работает
Я что-то упустил?
Обновление :
я сделал небольшую модификацию вышеприведенного кода, вместо того чтобы работать с xsl: param, я использовал его с xsl: apply-template
до модификации (предоставляется как ответ мне)
после модификации
моя ошибка: я использовал ns2: userid вместо "."
полный xsl-код
---
</p>
<p><xsl:output method="xml" indent="yes"/>
<xsl:key name="k" match="ns2:UserId" use="text()"/>
<xsl:key name="myUserId" match="ns2:UserId" use="."/>
<xsl:template match="/">
<ns2:Root>
<xsl:apply-templates select="//ns2:Details/ns2:UserId[generate-id(.)=generate-id(key('myUserId', .)[1])]"/>
</ns2:Root>
</xsl:template></p>
<p><xsl:template match="//ns2:Details">
<xsl:param name="userId" select="ns2:UserId"/>
<ns2:Details>
<xsl:copy-of select="key('k', $userId)[1]"/> <!-- displays UserId values-->
<xsl:copy-of select="./*[name() != 'ns2:UserId']"/> <!-- displays other values-->
</ns2:Details>
</xsl:template></p>
<p><xsl:template match="ns2:UserId">
<xsl:apply-templates select="..">
<xsl:with-param name="userId" select="."/>
</xsl:apply-templates>
</xsl:template></p>
<p>
Пожалуйста, подтвердите это. это тоже работает для меня ...