используйте xslt для изменения типа массива XML - PullRequest
0 голосов
/ 09 мая 2019

У меня есть исходный 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 голосов
/ 09 мая 2019

Предполагая, что атрибуты человека связаны с его положением, вы можете просто:

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-документ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...