2014-04-25 5 views
0

나는이처럼 보이는 XML있어 :그룹화 요소 1.0

<?xml version="1.0" encoding="UTF-8"?> 
<Itineraries> 
    <Itinerary> 
    <Details> 
     <FlightSegment DepartureDateTime="2014-05-02T14:24:00" ArrivalDateTime="2014-05-02T15:42:00" FlightNumber="5214"> 
     <DepartureAirport LocationCode="JFK" /> 
     <ArrivalAirport LocationCode="IAD" /> 
     <OperatingAirline Code="UA"> 
      </FlightSegment> 
     <FlightSegment DepartureDateTime="2014-05-02T16:24:00" ArrivalDateTime="2014-05-02T17:42:00" FlightNumber="54"> 
     <DepartureAirport LocationCode="IAD" /> 
     <ArrivalAirport LocationCode="MEX" /> 
     <OperatingAirline Code="UA"> 
      </FlightSegment> 
    </Details> 
    <Price> 
     <Base BasePr="250"> 
     <Total TotalPr="320"> 
      <Price> 
     </Itinerary> 
    <Itinerary> 
    <Details> 
     <FlightSegment DepartureDateTime="2014-06-02T14:24:00" ArrivalDateTime="2014-06-02T15:42:00" FlightNumber="725"> 
     <DepartureAirport LocationCode="JFK" /> 
     <ArrivalAirport LocationCode="IAD" /> 
     <OperatingAirline Code="UA"> 
      </FlightSegment> 
     <FlightSegment DepartureDateTime="2014-06-02T16:24:00" ArrivalDateTime="2014-06-02T17:42:00" FlightNumber="245"> 
     <DepartureAirport LocationCode="IAD" /> 
     <ArrivalAirport LocationCode="MEX" /> 
     <OperatingAirline Code="UA"> 
      </FlightSegment> 
    </Details> 
    <Price> 
     <Base BasePr="240"> 
     <Total TotalPr="310"> 
      <Price> 
      <Itinerary> 
       <Details> 
       <FlightSegment DepartureDateTime="2014-06-02T14:24:00" ArrivalDateTime="2014-06-02T15:42:00" FlightNumber="5124"> 
        <DepartureAirport LocationCode="JFK" /> 
        <ArrivalAirport LocationCode="IAD" /> 
        <OperatingAirline Code="UA"> 
      </FlightSegment> 
       <FlightSegment DepartureDateTime="2014-06-02T16:24:00" ArrivalDateTime="2014-06-02T17:42:00" FlightNumber="54"> 
        <DepartureAirport LocationCode="IAD" /> 
        <ArrivalAirport LocationCode="MEX" /> 
        <OperatingAirline Code="UA"> 
      </FlightSegment> 
       </Details> 
       <Price> 
       <Base BasePr="230"> 
        <Total TotalPr="300"> 
        <Price> 
     </Itinerary> 
      <Itinerary> 
       <Details> 
       <FlightSegment DepartureDateTime="2014-05-02T14:24:00" ArrivalDateTime="2014-05-02T15:42:00" FlightNumber="725"> 
        <DepartureAirport LocationCode="JFK" /> 
        <ArrivalAirport LocationCode="IAD" /> 
        <OperatingAirline Code="UA"> 
      </FlightSegment> 
       <FlightSegment DepartureDateTime="2014-05-02T16:24:00" ArrivalDateTime="2014-05-02T17:42:00" FlightNumber="245"> 
        <DepartureAirport LocationCode="IAD" /> 
        <ArrivalAirport LocationCode="MEX" /> 
        <OperatingAirline Code="UA"> 
      </FlightSegment> 
       </Details> 
       <Price> 
       <Base BasePr="220"> 
        <Total TotalPr="290"> 
        <Price> 
     </Itinerary> 
      </Itineraries> 

을 그리고 그 그룹 비행을 공유하는 "여정"개의 노드 XSLT를 작성해야 그들의 비행 세그먼트의 수.

<table> 
    <table> 
    <tr> 
     <td> 
     Flight: 5124 
     </td> 
     <td> 
     JFK - IAD 
     </td> 
    </tr> 
    <tr> 
     <td> 
     Airline: UA 
     </td> 
    </tr> 
    <tr> 
     <td> 
     Departure: 14:24 
     </td> 
     <td> 
     Arrival: 15:42 
     </td> 
    </tr> 
    <tr> 
     <td> 
     Flight: 54 
     </td> 
     <td> 
     IAD - MEX 
     </td> 
    </tr> 
    <tr> 
     <td> 
     Airline: UA 
     </td> 
    </tr> 
    <tr> 
     <td> 
     Departure: 16:24 
     </td> 
     <td> 
     Arrival: 17:42 
     </td> 
    </tr> 
    </table> 
    <table> 
    <tr> 
     <td> 
     <table> 
      <tr> 
      <td>2014-05-02</td> 
      </tr> 
      <tr> 
      <td>Base</td> 
      <td>250</td> 
      </tr> 
      <tr> 
      <td>Total</td> 
      <td>320</td> 
      </tr> 
     </table> 
     <table> 
      <tr> 
      <td>2014-06-02</td> 
      </tr> 
      <tr> 
      <td>Base</td> 
      <td>230</td> 
      </tr> 
      <tr> 
      <td>Total</td> 
      <td>300</td> 
      </tr> 
     </table> 
     </td> 
    </tr> 
    </table> 
    <table> 
    <tr> 
     <td> 
     Flight: 725 
     </td> 
     <td> 
     JFK - IAD 
     </td> 
    </tr> 
    <tr> 
     <td> 
     Airline: UA 
     </td> 
    </tr> 
    <tr> 
     <td> 
     Departure: 14:24 
     </td> 
     <td> 
     Arrival: 15:42 
     </td> 
    </tr> 
    <tr> 
     <td> 
     Flight: 245 
     </td> 
     <td> 
     IAD - MEX 
     </td> 
    </tr> 
    <tr> 
     <td> 
     Airline: UA 
     </td> 
    </tr> 
    <tr> 
     <td> 
     Departure: 16:24 
     </td> 
     <td> 
     Arrival: 17:42 
     </td> 
    </tr> 
    </table> 
    <table> 
    <tr> 
     <td> 
     <table> 
      <tr> 
      <td>2014-05-02</td> 
      </tr> 
      <tr> 
      <td>Base</td> 
      <td>220</td> 
      </tr> 
      <tr> 
      <td>Total</td> 
      <td>290</td> 
      </tr> 
     </table> 
     <table> 
      <tr> 
      <td>2014-06-02</td> 
      </tr> 
      <tr> 
      <td>Base</td> 
      <td>240</td> 
      </tr> 
      <tr> 
      <td>Total</td> 
      <td>310</td> 
      </tr> 
     </table> 
     </td> 
    </tr> 
    </table> 
</table> 

하지만 지금은, 내가 지금까지와 같은있어 :

는 결국, 나는 다음과 같은 HTML 출력이 필요

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> 
    <xsl:output method="html" indent="yes"/> 
    <xsl:key name="groups" match="Itinerary" use="./Details/FlightSegment/@FlightNumber"/> 
    <xsl:template match="/"> 

    <table> 
     <tr> 
     <td> 
      <xsl:for-each select="/Itineraries/Itinerary[generate-id() = generate-id(key('groups', Itinerary)[1])]"> 
      <table> 
       <tr> 
       <td> 
        <xsl:value-of select="@FlightNumber"/> 
        <td> 
</tr> 
      </table> 
      </xsl:for-each> 
     </td> 
     </tr> 
    </table> 
    </xsl:template> 

</xsl:stylesheet> 

하지만 뭔가 내 키를 잘못해야합니다 내가 때문에 첫 번째 빈 테이블 만 null 결과를 얻지 만 디버거는 컴파일 오류 또는 내 코드 문제를 표시하지 않습니다.

나는 muenchian 그룹 및 복합 키의 differents 방법을 찾고 있었지만 해결책을 찾을 수 없습니다. 나는 왜 내 열쇠가 작동하지 않는지도 모르니까, 당신이 나에게 줄 수있는 어떤 도움도 크게 감수하게 될 것입니다.

미리 감사드립니다.

+0

를 사용하는 것입니다,하지만이 내가 작업있어 기본 값입니다. – RodrigoHernandez

답변

0

솔직히 입력 샘플과 XSLT 샘플 모두 올바른 형식이 아니므로 출력을 전혀 얻을 수 없다고 상상하기 어렵습니다.

그러나 일반적인 접근 방식 <xsl:key name="groups" match="Itinerary" use="./Details/FlightSegment/@FlightNumber"/> 주어 내가 내 원래 XML이 조금 더 복잡한보다 떨어져 있음을 알아 두셔야합니다

<xsl:for-each select="/Itineraries/Itinerary[generate-id() = generate-id(key('groups', Details/FlightSegment/@FlightNumber)[1])]"> 
+0

내 이전 의견이 잘못되었습니다. 나는 코드로 약간 연주했고 당신의 솔루션은 작동합니다. 감사. 이제 구조를 계속 연구 할 수 있습니다. – RodrigoHernandez