2016-12-19 10 views
0

У меня есть версия XSL 2.0 для удаления дубликатов с использованием <xsl:sequence>. Я просто удаляю повторяющиеся элементы Entry из базы данных xml ниже. Кроме того, мне нужно рассмотреть поле даты и удалить старый. В качестве альтернативы я мог бы удалить ту, которая не является текущей, поскольку новая запись всегда ставится на печать с текущей даты. В этом случае удалите идентификатор Entry for ID от 2016-09-01 (полужирный). Имейте в виду, что я не хочу удалять запись, которая не является дублирующей, независимо от даты.XSLT более конкретное использование выбора последовательности для повторяющихся элементов с разными датами

<?xml version='1.0' encoding='utf-8'?> 
<Data> 
    <Entry> 
     <ID>aces</ID> 
     <Info> 
      <Code2>0006</Code2> 
      <AMOUNT>7.52<AMOUNT>    
     <Info> 
     <Date>2016-12-18-05:00</Date> 
    </Entry> 
    <Entry> 
     <ID>chawk</ID> 
     <Info> 
      <Code2>0007</Code2> 
      <AMOUNT>7.53<AMOUNT>    
     <Info> 
     <Date>2016-11-01-05:00</Date> 
    </Entry> 
    **<Entry> 
     <ID>aces</ID> 
     <Info> 
      <Code2>0006</Code2> 
      <AMOUNT>7.53<AMOUNT>    
     <Info> 
     <Date>2016-09-01-05:00</Date> 
    </Entry>** 
</Data> 

Вот мой текущий XSL:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 

    <xsl:template match="/*"> 
     <Data xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
      <xsl:for-each-group select="Entry" group-by="ID"> 
       <xsl:sequence select="."/> 
      </xsl:for-each-group> 
     </Data> 
    </xsl:template> 
</xsl:stylesheet> 

Заранее спасибо за вашу помощь.

ответ

2

Сортировать элементы в группе по дате и выход только последний пункт (последний в сортировке по возрастанию или убыванию в первом порядке сортировки):

<xsl:template match="/*"> 
    <Data xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
     <xsl:for-each-group select="Entry" group-by="ID"> 
      <xsl:for-each select="current-group()"> 
       <xsl:sort select="Date" order="descending"/> 
       <xsl:if test="position() eq 1"> 
        <xsl:copy-of select="."/> 
       </xsl:if> 
      </xsl:for-each> 
     </xsl:for-each-group> 
    </Data> 
</xsl:template> 
+0

Это работает ... СПАСИБО! – user1375987

 Смежные вопросы

  • Нет связанных вопросов^_^