У меня есть исходный XML, подобный этому
<person>
<name>Alex</name>
<name>David</name>
<name>Ray</name>
<height>170</height>
<height>160</height>
<height>172</height>
<weight>80</weight>
<weight>70</weight>
<weight>64</weight>
</person>
но нужно отображать вот так
<person>
<name>Alex</name>
<height>170</height>
<weight>80</weight>
</person>
<person>
<name>David</name>
<height>160</height>
<weight>70</weight>
</person>
<person>
<name>Ray</name>
<height>172</height>
<weight>64</weight>
</person>
и я не знаю общего количества людей, как это сделать с помощью xslt?
версия = "1.0", спасибо





Предполагая, что атрибуты человека связаны его положением, вы можете сделать просто:
XSLT 1.0
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "xml" version = "1.0" encoding = "UTF-8" indent = "yes"/>
<xsl:template match = "/person">
<root>
<xsl:for-each select = "name">
<xsl:variable name = "i" select = "position()" />
<person>
<xsl:copy-of select = "."/>
<xsl:copy-of select = "../height[$i]"/>
<xsl:copy-of select = "../weight[$i]"/>
</person>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
Обратите внимание на добавленный элемент root в выводе; без него результатом будет фрагмент дерева результатов, а не правильно сформированный XML-документ.
Укажите, какую версию XSLT вы используете. Кроме того, известны ли имена дочерних элементов, такие как
name,heightиweight, при написании XSLT?