xslt как достать неключевые узлы? - PullRequest
1 голос
/ 29 марта 2019

Ввод xml:

    <Produkt><Index>275938</Index><Nazwa><RĘKAWICE BRAMKARSKIE PUMA 040959 01 SIZE.11></Nazwa><Ean>887119275938</Ean></Produkt>
    <Produkt><Index>275921</Index><Nazwa><RĘKAWICE BRAMKARSKIE PUMA 040959 01 SIZE.10></Nazwa><Ean>887119275921</Ean></Produkt>
    <Produkt><Index>1001128</Index><Nazwa><ZESTAW DO NURKOWANIA VIZARI JUNIOR XS 32-34></Nazwa><Ean>5902431001128</Ean></Produkt>
    <Produkt><Index>1001111</Index><Nazwa><ZESTAW DO NURKOWANIA VIZARI JUNIOR XXS 30-32></Nazwa><Ean>5902431001111</Ean></Produkt>
    <Produkt><Index>7194A</Index><Nazwa><PUCHAR PLASTIKOWY SREBRNO - NIEBIESKI 7194A></Nazwa><Ean>2010000242261</Ean></Produkt>
    <Produkt><Index>7194B</Index><Nazwa><PUCHAR PLASTIKOWY SREBRNO - NIEBIESKI 7194B></Nazwa><Ean>2010000242278</Ean></Produkt>

Ключи:

    <xsl:key name="ProductSize" match="Produkt" use="substring-before(Nazwa, 'SIZE.')" />
    <xsl:key name="ProductSize2" match="Produkt" use="substring-before(translate(Nazwa, '0123456789#', '##########'), '##-##')" />
    <xsl:key name="Restofproducts" match="Produkt" use="???????" />

Здравствуйте, я группирую продукты по размерам, скрытым в названии продуктов, и мне нужен ключ для хранения всех продуктов, которыенет ни в одном другом ключе.

Ожидаемая группировка:

<xsl:key name="ProductSize" match="Produkt" use="substring-before(Nazwa, 'SIZE.')" />
- <Produkt><Nazwa>RĘKAWICE BRAMKARSKIE PUMA 040959 01 SIZE.11</Nazwa></Produkt>
- <Produkt><Nazwa>RĘKAWICE BRAMKARSKIE PUMA 040959 01 SIZE.10</Nazwa></Produkt>
<xsl:key name="ProductSize2" match="Produkt" use="substring-before(translate(Nazwa, '0123456789#', '##########'), '##-##')" />
- <Produkt><Nazwa>ZESTAW DO NURKOWANIA VIZARI JUNIOR XS 32-34</Nazwa></Produkt>
- <Produkt><Nazwa>ZESTAW DO NURKOWANIA VIZARI JUNIOR XXS 30-32</Nazwa></Produkt>
<xsl:key name="Restofproducts" match="Produkt" use="???????" />
- <Produkt><Nazwa>PUCHAR PLASTIKOWY SREBRNO - NIEBIESKI 7194A</Nazwa></Produkt>
- <Produkt><Nazwa>PUCHAR PLASTIKOWY SREBRNO - NIEBIESKI 7194B</Nazwa></Produkt>

Есть идеи, как должен выглядеть "Restofproducts"?

1 Ответ

3 голосов
/ 29 марта 2019

Я не совсем уверен, что вы имеете в виду. Учитывая определение

<xsl:key name="ProductSize" 
         match="Produkt" 
         use="substring-before(concat(Nazwa, 'SIZE.'), 'SIZE.')" />

этот ключ включает в себя все Produkt узлы. Поэтому, когда вы говорите «хранить все товары, которых нет ни в одном другом ключе», таких товаров нет.

Если вы хотите, чтобы каждый ключ индексировал только подмножество элементов Produkt, вам необходимо определить это подмножество в шаблоне совпадения, например

<xsl:key name="ProductSize" 
         match="Produkt[contains(Nazwa, 'SIZE.')]" 
         use="substring-before(Nazwa, 'SIZE.')" />

Затем вы можете сопоставить несопоставимые элементы, используя дополнительный предикат, например match="Produkt[not([contains(Nazwa, 'SIZE.')) and not(...)]"

...