XSLT Помощь в получении разных значений - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть XML-документ (показанный ниже), мне нужно получить список всех уникальных значений Type @ID, независимо от того, где они находятся ниже SizeRanges

Итак, для этого документа мне нужно собрать 10,8,6,5 в то, что я могу использовать для каждого при *. 1003 *

В конечном счете, я пытаюсь показать каждый SizeRange в таблице рядом друг с другом, и получить одинаковые типы, расположенные в одной строке. Но проблема, с которой я сталкиваюсь, заключается в извлечении отдельного списка типов, которые я могу зациклить.

XML-документ:

<SizeRanges>
    <SizeRange ID="1" Name="8-18">
        <Types>
            <Type ID="10">
                <Size Name="8"  Quantity="1" />
                <Size Name="10" Quantity="2" />
                <Size Name="12" Quantity="2" />
                <Size Name="14" Quantity="3" />
                <Size Name="16" Quantity="1" />
                <Size Name="18" Quantity="1" />
            </Type>
            <Type ID="8">
                <Size Name="8"  Quantity="1" />
                <Size Name="10" Quantity="1" />
                <Size Name="12" Quantity="2" />
                <Size Name="14" Quantity="2" />
                <Size Name="16" Quantity="1" />
                <Size Name="18" Quantity="1" />
            </Type>
            <Type ID="6">
                <Size Name="8"  Quantity="1" />
                <Size Name="10" Quantity="1" />
                <Size Name="12" Quantity="1" />
                <Size Name="14" Quantity="1" />
                <Size Name="16" Quantity="1" />
                <Size Name="18" Quantity="1" />
            </Type>
            <Type ID="5">
                <Size Name="10" Quantity="1" />
                <Size Name="12" Quantity="1" />
                <Size Name="14" Quantity="1" />
                <Size Name="16" Quantity="1" />
                <Size Name="18" Quantity="1" />
            </Type>
        </Types>
    </SizeRange>
    <SizeRange ID="2" Name="S-XL">
        <Types>
            <Type ID="10">
                <Size Name="S"  Quantity="1" />
                <Size Name="M"  Quantity="3" />
                <Size Name="L"  Quantity="4" />
                <Size Name="XL" Quantity="2" />
            </Type>
            <Type ID="8">
                <Size Name="S"  Quantity="1" />
                <Size Name="M"  Quantity="2" />
                <Size Name="L"  Quantity="3" />
                <Size Name="XL" Quantity="2" />
            </Type>
            <Type ID="6">
                <Size Name="S"  Quantity="1" />
                <Size Name="M"  Quantity="2" />
                <Size Name="L"  Quantity="2" />
                <Size Name="XL" Quantity="1" />
            </Type>
            <Type ID="5">
                <Size Name="S"  Quantity="1" />
                <Size Name="M"  Quantity="1" />
                <Size Name="L"  Quantity="2" />
                <Size Name="XL" Quantity="1" />
            </Type>
        </Types>
    </SizeRange>
</SizeRanges>

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

Дайте этому шанс:

<xsl:key name="types" match="Type" use="@ID"/>
<xsl:variable name="distinctTypes" as="xs:integer*" select="distinct-values(//SizeRange/Types/Type)" />
<xsl:template match="/">
    <xsl:for-each select="$distinctTypes">
        <xsl:value-of select="." />
    </xsl:for-each>
</xsl:template>

Вот еще один способ:

<xsl:key name="types" match="Type" use="@ID"/>
<xsl:template match="/">
    <xsl:for-each select="//SizeRange/Types/Type[generate-id() = generate-id(key('types', @ID)[1])]">
        <xsl:value-of select="@ID"/>
    </xsl:for-each>
</xsl:template>
1 голос
/ 27 сентября 2011

в XSLT 2.0 вы можете сделать это следующим образом ..

distinct-values(/SizeRanges/SizeRange/Types/Type/@ID)

Это дает уникальные идентификаторы в качестве вывода

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