XSLT для копирования из двух тегов с индексным атрибутом 1/2 в одном теге - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть XML, как это:

    <tns:name2List>
        <tns:name2 index="1">Name</tns:name2>
        <tns:name2 index="2">A</tns:name2>
        <tns:name2 index="1">Surname</tns:name2>
        <tns:name2 index="2">B</tns:name2>
    </tns:name2List>

И мне нужно получить что-то вроде этого:

<name2List>
    <name>Name A</name>
    <name>Name B</name>
</name2List>

Знаете ли вы, как я могу сделать это с XSLT 1.0? Спасибо!

Я пробовал что-то вроде:

 <xsl:template match="/tns:name2List/tns:name2">
    <name>
         <xsl:for-each select="/tns:name2List/tns:name2">
               <xsl:value-of select="."/><xsl:text> </xsl:text>
         </xsl:for-each>
    </name>
 </xsl:template>

, но я получаю немного:

<name>
    <name>Name A Name B </name>
    <name>Name A Name B </name>
    <name>Name A Name B </name>
    <name>Name A Name B </name>
</name>

Как я могу изменить его, чтобы получить желаемый результат?

1 Ответ

1 голос
/ 11 февраля 2020

В данном примере вы можете сделать просто:

<xsl:template match="/tns:name2List">
    <name2List>
        <xsl:for-each select="tns:name2[@index=1]">
            <name>
                <xsl:value-of select="."/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="following-sibling::tns:name2"/>
            </name>
        </xsl:for-each>
    </name2List>
</xsl:template>

Обратите внимание, что это предполагает, что вход организован в пары - так, чтобы каждый элемент tns:name2 со значением index равным 1 был сразу затем следует другой элемент tns:name2 со значением index, равным 2. Если это предположение неверно, попробуйте:

<xsl:value-of select="following-sibling::tns:name2[1][@index=2]"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...