Как использовать XSLT для создавания отличной стоимости

У меня есть XML как это:

<items>
  <item>
    <products>
      <product>laptop</product>
      <product>charger</product>
    </products>
  </item>
  <item>
    <products>
      <product>laptop</product>
      <product>headphones</product>  
    </products>  
  </item>
</items>

Я хочу, чтобы это произвело как

laptop
charger
headphones

Я пытался использовать distinct-values() но я предполагаю, что делаю что-то не так. Может любой говорить мне, как достигнуть этого использования distinct-values()?Спасибо.

<xsl:template match="/">            
  <xsl:for-each select="//products/product/text()">
    <li>
      <xsl:value-of select="distinct-values(.)"/>
    </li>               
  </xsl:for-each>
</xsl:template>

но его предоставление мне вывод как это:

<li>laptop</li>
<li>charger</li>
<li>laptop></li>
<li>headphones</li>
52
задан Erik Philips 18 September 2013 в 17:28
поделиться

3 ответа

Решение XSLT 1.0, использующее key и функцию generate-id() для получения отдельных значений:

<?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet
   version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>

<xsl:key name="product" match="/items/item/products/product/text()" use="." />

<xsl:template match="/">

  <xsl:for-each select="/items/item/products/product/text()[generate-id()
                                       = generate-id(key('product',.)[1])]">
    <li>
      <xsl:value-of select="."/>
    </li>
  </xsl:for-each>

</xsl:template>

</xsl:stylesheet>
51
ответ дан 7 November 2019 в 09:06
поделиться

distinct-values(//product/text())

8
ответ дан 7 November 2019 в 09:06
поделиться

Вам нужен не «вывод (отдельные значения)», а «для каждого (отдельные значения)»:

<xsl:template match="/">              
  <xsl:for-each select="distinct-values(/items/item/products/product/text())">
    <li>
      <xsl:value-of select="."/>
    </li>
  </xsl:for-each>
</xsl:template>
18
ответ дан 7 November 2019 в 09:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: