Из-за вашего беспорядочного использования //
ваша внутренняя инструкция:
<xsl:for-each select="//p:root/r:Entries/p:root">
обработает все r:Entries/p:root
узлов во всем документе XML.А так как он вложен во внешний:
<xsl:for-each select="//p:root/r:Entries">
, он будет создан дважды, один раз для каждого r:Entries
узла в XML.Каждый узел, обработанный дважды, дает вдвое больше узлов, чем нужно было начинать.
Аналогично, ваш:
<xsl:value-of select="//*[local-name()='LAT']"/>
выбирает все узловв XML-документе с локальным именем "LAT"
- и в XSLT 1.0 xsl:value-of
всегда будет возвращать значение первого из них.
Еще один момент, о котором стоит упомянуть: поскольку вы объявилии xmlns:p="test1"
и xmlns:r="test2"
(как вам следует), нет необходимости использовать хаки, такие как *[local-name()='LAT']
, когда вы можете использовать p:LAT
.
Наконец, не используйте xsl:element
, гдеДостаточно буквального элемента результата: например, вместо <xsl:element name="Test">
напишите <Test>
.