XSLT повторяющийся элемент - PullRequest
0 голосов
/ 30 апреля 2018

При экспорте XML-канала в Excel повторяющийся элемент <IMAGES> имеет неправильный формат. Пожалуйста, помогите, как получить правильный вывод.

Неверный вывод XML

<DATA>
    <CODE>1</CODE>
    <IMAGES>
        <IMAGE>1</IMAGE>
    </IMAGES>
</DATA>
<DATA>
    <CODE>1</CODE>
    <IMAGES>
        <IMAGE>2</IMAGE>
    </IMAGES>
</DATA>

Правильный вывод XML

<DATA>
    <CODE>
        <IMAGES>
            <IMAGE>1</IMAGE>
            <IMAGE>2</IMAGE>
        </IMAGES>
    </CODE>
</DATA>

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 09 мая 2018

Для XSLT 2.0 вы можете использовать для каждой группы

<xsl:template match="root">
    <xsl:for-each-group select="DATA" group-by="CODE">
        <DATA>
            <CODE><xsl:value-of select="CODE"/></CODE>
            <IMAGES>
                <xsl:copy-of select="current-group()//IMAGE"></xsl:copy-of>
            </IMAGES>
        </DATA>
    </xsl:for-each-group>
</xsl:template>

и для XSLT 1.0 вы можете использовать метод Мюнхена

<xsl:key name="datakey" match="DATA" use="CODE"/>
<xsl:template match="root">
    <xsl:for-each select="DATA[generate-id(.) = generate-id(key('datakey', CODE))]">
        <DATA>
            <CODE><xsl:value-of select="CODE"/></CODE>
            <IMAGES>
                <xsl:for-each select="//IMAGES[../CODE = current()/CODE]">
                <xsl:copy-of select="IMAGE"></xsl:copy-of>
                </xsl:for-each>
            </IMAGES>
        </DATA>
    </xsl:for-each>
</xsl:template>

Оба сценария конвертируют этот Вывод

<DATA>
   <CODE>1</CODE>
   <IMAGES>
      <IMAGE>1</IMAGE>
      <IMAGE>2</IMAGE>
   </IMAGES>
</DATA>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...