Преобразование XSLT 1.0, удаляющее дубликаты с использованием переменных - PullRequest
0 голосов
/ 31 августа 2018

по нескольким причинам, мне нужно получить переменную в XSLT 1.0, которую можно использовать повторно во время преобразования, которая собирает уникальный список повторяющихся записей.

Входные данные генерируются в XSLT в переменную "portlist":

<plist> 
  <p>12345</p>
  <p>12345</p>
  <p>9876</p>
  <p>12345</p>
<plist>

в моем XSLT-шаблоне, мне нужна переменная "ReducedList", чтобы несколько раз использовать ее в преобразовании. Как я могу сгенерировать новую переменную "extendedList" в XSLT, которая выглядит как

<plist> 
  <p>12345</p>
  <p>9876</p>
<plist>

Я нашел несколько примеров, но должен признаться, что не мог понять.

Мой xslt-шаблон выглядит как

<xsl:template match="stage">

   <xsl:variable name="portlist" > <!-- returns a sorted list of all ports -->
       <plist>
          <xsl:for-each select="provider/server/QMGR"><!-- input from XML -->
             <xsl:sort select="."/>
             <p><xsl:value-of select="./@port"/></p>
           </xsl:for-each>
        </plist>
    </xsl:variable>

    <!-- here i need to derive the new variable reducedList  -->

    <!-- more code using reducedList follows here -->
</xsl:template>

1 Ответ

0 голосов
/ 31 августа 2018
<xsl:variable name="portlist">
  <plist>
    <p>12345</p>
    <p>12345</p>
    <p>9876</p>
    <p>12345</p>
  </plist>
</xsl:variable>

<xsl:variable name="reducedList">
  <plist>
    <xsl:copy-of select="ext:node-set($portlist)/plist/p[not(text() = preceding-sibling::p/text())]"/>
  </plist>
</xsl:variable>

, где ext - это пространство имен вашего расширения с node-set(), например, xmlns:ext="urn:schemas-microsoft-com:xslt".

...