Как мне объединить значения столбца на основе другого столбца в XSLT? - PullRequest
0 голосов
/ 27 ноября 2018

Как объединить значения столбца на основе другого столбца в XSLT?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <Document>
<Type>N</Type>
<Id>205777</Id>
<Document_No>001</Document_No>
<Date>Jul 23, 2014</Date>
<Items>
    <Item>
        <Item_Id>9352025</Item_Id>
        <Date>Jun 7, 2030</Date>
        <Code>U-2116</Code>
    </Item>
    <Item>
        <Item_Id>9352025</Item_Id>
        <Date>Jun 7, 2030</Date>
        <Code>U-2114</Code>
    </Item>
    <Item>
        <Item_Id>9352025</Item_Id>
        <Date>Jun 7, 2030</Date>
        <Code>U-2111</Code>
    </Item>
    <Item>
        <Item_Id>9161937</Item_Id>
        <Date>May 10, 2022</Date>
        <Drug_Product_Flag>Y</Drug_Product_Flag>
        <Code>U-1556</Code>
    </Item>
    <Item>
        <Item_Id>9168252</Item_Id>
        <Date>May 10, 2022</Date>
        <Drug_Product_Flag>Y</Drug_Product_Flag>
        <Code>U-1556</Code>
    </Item>
</Items>
</Document>

Я хочу выводить как

enter image description here

Пожалуйста, помогите мне в этом.Я уже пробовал это <xsl:for-each select="/Document/Items/Item[generate-id()=generate-id(key('itemKey',Item_Id)[1])]">

1 Ответ

0 голосов
/ 27 ноября 2018

В год необходимо создать два ключа, например

<xsl:key name="itemKey" match="/Document/Items/Item" use="Item_Id"/>
<xsl:key name="itemCodeKey" match="/Document/Items/Item" use="concat(Item_Id, '|', Code)"/>

И использовать цикл для каждого , чтобы эффективно использовать count

<xsl:for-each select="/Document/Items/Item[generate-id() = generate-id(key('itemKey',Item_Id)[1])]">
                        <xsl:sort select="Patent_No" />
                        <tr>
                            <td>
                                <xsl:value-of select="normalize-space(Item_Id)" />
                            </td>
                            <td>
                                <xsl:value-of select="normalize-space(Date)" />
                            </td>
                            <td>
                                <xsl:variable name="count" select="count(key('itemKey',Item_Id)[generate-id() = generate-id(key('itemCodeKey', concat(Item_Id, '|', Code))[1])])"/>
                                <xsl:for-each select="key('itemKey',Item_Id)[generate-id() = generate-id(key('itemCodeKey', concat(Item_Id, '|', Code))[1])]">
                                    <xsl:sort select="Code" />
                                    <xsl:value-of select="normalize-space(Code)"/>
                                    <xsl:if test="$count != position()">, </xsl:if>                     
                                </xsl:for-each>
                            </td>
                        </tr>
                    </xsl:for-each>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...