2013-07-15 2 views
0
<passengergroup> 
    <passengerList> 
<passDetails> 
    <route>LONDON</route> 
    <lastname>RAY</lastname> 
</passDetails> 
<seatDetails> 
    <SeatNo>1A</SeatNo> 
</seatDetails> 
<customervalue>AB</customervalue> 
    </passengerList 
    <passengerList> 
<passDetails> 
    <route>LONDON</route> 
    <lastname>RAY</lastname> 
</passDetails> 
<seatDetails> 
    <SeatNo>1B</SeatNo> 
</seatDetails> 
<customervalue>good</customervalue> 

    </passengerList 
<passengerList> 
    <passDetails> 
      <route>DELHI</route> 
    <lastname>RAY</lastname> 
    </passDetails> 
     <seatDetails> 
    <SeatNo>2C</SeatNo> 
    </seatDetails> 
    <customervalue>BC</customervalue> 
     </passengerList> 
     <passengerList> 
    <passDetails> 
    <route>DELHI</route> 
    <lastname>RAY</lastname> 
    </passDetails> 
    <seatDetails> 
     <SeatNo>2D</SeatNo> 
    </seatDetails> 
    <customervalue>okey</customervalue> 

     </passengerList> 
    </passengergroup> 


    <xsl:for-each select="passengergroup/passengerList"> 
<xsl:if test="customervalue='good' 
    <xsl:value-of select="route"/><xsl:text> </xsl:text> 
    <xsl:value-of select="customervalue"/><xsl:text> </xsl:text> 
    <xsl:value-of select="seatDetails/SeatNo"/> 
    </for-each> 

    <xsl:for-each select="passengergroup/passengerList"> 
     <xsl:if test="customervalue='ok' 
<xsl:value-of select="route"/><xsl:text> </xsl:text> 
<xsl:value-of select="customervalue"/><xsl:text> </xsl:text> 
<xsl:value-of select="seatDetails/SeatNo"/> 
    </for-each> 

    Output 
    It will produce output like this 

    LONDON good 1A 
    LONDON good 1B 
    DELHI okey 2C 
    DELHI okey 2D 

     But i need the output like this 
    LONDON good 1A 1B 
    DELHI okey 2C 2D 

Если «LONDON хорошо„повторяется много раз, он должен быть напечатан только once.but мы должны повторить место не как“1A 1B 1C 1D 1F 2G и так on'.i AM с использованием xslt2.0 И MY OUTPUT TYPE IS text. Thing не нужно отображать элементы много раз Я пробовал много .. не в состоянии разобраться в решениях, пожалуйста, помогите мне.XSLT2.0 группировка на основе трех полей

ответ

0

IMO ваш входной XML не соответствует требуемой продукции (например, есть только один LONDON с customervalue = хорошо. Но, может быть, я не понимаю, ну что вы нужны. Но после XSLT может сделать работу.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
    <xsl:output method="text" /> 

    <xsl:template match="/"> 
      <xsl:apply-templates select="passengergroup" /> 
    </xsl:template> 

    <xsl:template match="passengergroup"> 
     <xsl:for-each-group select="passengerList" group-by="concat(passDetails/route, ' ', customervalue)"> 
      <xsl:value-of select="current-grouping-key()" /> 
      <xsl:text> </xsl:text> 
      <xsl:value-of select="current-group()/seatDetails/SeatNo" separator=" " /> 
      <xsl:value-of select="'&#10;'" /> 
     </xsl:for-each-group> 
    </xsl:template> 

</xsl:stylesheet> 

Для ввода

<?xml version="1.0" encoding="UTF-8"?> 
<passengergroup> 
    <passengerList> 
     <passDetails> 
      <route>LONDON</route> 
      <lastname>RAY</lastname> 
     </passDetails> 
     <seatDetails> 
      <SeatNo>1A</SeatNo> 
     </seatDetails> 
     <customervalue>good</customervalue> 
    </passengerList> 
    <passengerList> 
     <passDetails> 
      <route>LONDON</route> 
      <lastname>RAY</lastname> 
     </passDetails> 
     <seatDetails> 
      <SeatNo>1B</SeatNo> 
     </seatDetails> 
     <customervalue>good</customervalue> 
    </passengerList> 
    <passengerList> 
     <passDetails> 
      <route>DELHI</route> 
      <lastname>RAY</lastname> 
     </passDetails> 
     <seatDetails> 
      <SeatNo>2C</SeatNo> 
     </seatDetails> 
     <customervalue>BC</customervalue> 
    </passengerList> 
    <passengerList> 
     <passDetails> 
      <route>DELHI</route> 
      <lastname>RAY</lastname> 
     </passDetails> 
     <seatDetails> 
      <SeatNo>2D</SeatNo> 
     </seatDetails> 
     <customervalue>okey</customervalue> 
    </passengerList> 
</passengergroup> 

он производит следующий вывод

LONDON good 1A 1B 
DELHI BC 2C 
DELHI okey 2D 
+0

Спасибо большое .... Y Я понимаю, что я очень хорошо это понимаю. Но я не объяснил это четко ... На самом деле я не знаю, как делать конкатенатные поля для каждой группы. Я узнал это от вас .... Большое спасибо – user2579370

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