xslt如何获得不带键节点?

时间:2019-03-29 10:17:12

标签: xml xslt xslt-1.0

输入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 个答案:

答案 0 :(得分:3)

我不太清楚你的意思。给定定义

<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(...)]"

来匹配其他不匹配的元素)