2013-11-24 4 views
0

Мне нужно преобразовать некоторые данные с помощью xslt. В принципе, мне нужно сгруппировать информацию для каждого клиента. Впоследствии все значения времени & должны отображаться на уровне клиента. Я должен упомянуть, что мне не нужно отображать только отдельные значения. XSLT нет группировки на 2-м уровне

<XMLLINE> 

<Customer>1</Customer> 

<Day> Monday </Day> 

<Hour> 10:00 <Hour> 

</XMLLine> 

<XMLLINE> 

<Customer>2</Customer> 

<Day> Monday</Day> 

<Hour> 12:00 <Hour> 

</XMLLine> 

<XMLLINE> 

<Customer>1</Customer> 

<Day> Tuesday</Day> 

<Hour> 12:00 <Hour> 

</XMLLine> 

</XMLines> 

Вывод должен выглядеть

<Clients> 

<Customer> 

<Id> 1 </Id> 

<Days> 

<Day> Monday </Day> 

<Hour> 10:00 <Hour> 

<Day> Tuesday</Day> 

<Hour> 12:00 <Hour> 

</Days> 

</Customer> 

<Customer> 

<Id> 2 </Id> 

<Days> 

<Day> Monday </Day> 

<Hour> 12:00 <Hour> 

</Days> 

</Customer> 

</Clients> 

Большое спасибо ребята

+0

Есть много решений на StackExchange для этой задачи. что ты уже испробовал? Какова ваша конкретная проблема? –

ответ

0

Просто группа с Muenchian группировки, определения ключа, а затем с помощью функции key, чтобы найти все элементы в группе:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output method="xml" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:key name="c-by-id" match="XMLLINE" use="Customer"/> 

<xsl:template match="XMLines"> 
    <Clients> 
    <xsl:apply-templates select="XMLLINE[generate-id() = generate-id(key('c-by-id', Customer)[1])]"/> 
    </Clients> 
</xsl:template> 

<xsl:template match="XMLLINE"> 
    <Customer> 
    <Id><xsl:value-of select="Customer"/></Id> 
    <Days> 
     <xsl:copy-of select="key('c-by-id', Customer)/*[self::Day | self::Hour]"/> 
    </Days> 
    </Customer> 
</xsl:template> 

</xsl:stylesheet> 

Превращает

<XMLines> 
<XMLLINE> 

<Customer>1</Customer> 

<Day> Monday </Day> 

<Hour> 10:00 </Hour> 

</XMLLINE> 

<XMLLINE> 

<Customer>2</Customer> 

<Day> Monday</Day> 

<Hour> 12:00 </Hour> 

</XMLLINE> 

<XMLLINE> 

<Customer>1</Customer> 

<Day> Tuesday</Day> 

<Hour> 12:00 </Hour> 

</XMLLINE> 

</XMLines> 

в

<Clients> 
    <Customer> 
     <Id>1</Id> 
     <Days> 
     <Day> Monday </Day> 
     <Hour> 10:00 </Hour> 
     <Day> Tuesday</Day> 
     <Hour> 12:00 </Hour> 
     </Days> 
    </Customer> 
    <Customer> 
     <Id>2</Id> 
     <Days> 
     <Day> Monday</Day> 
     <Hour> 12:00 </Hour> 
     </Days> 
    </Customer> 
</Clients>