2015-09-21 79 views
1

我目前正在嘗試創建一個可以由4種可能類型組成的旅行路線。這些是機票,住宿,郵輪和雜項(租車等)。Java XSL/XML JAXB

我將這些值從MySQL數據庫加載到XML中(一切正常),然後使用XSL和FOP將其轉換爲PDF。

我想鍛鍊什麼是組織對我的需要,XML的最佳方式,基本上我希望它看起來像這樣在PDF

22NOV London to JFK 
     ........ 
22NOV Hilton Hotel, New York 
     ........ 
25NOV JFK to London 
     ....... 

難道我最好的結構化的XML像這樣使用XSL分組變換

<itinerary> 
    <flights> 
     <flightDate>...</flightDate> 
     .......... 
    </flights> 
    <accommodation> 
     <accommodationDate>.....</accommodationDate> 
     ......... 
    </accommodation> 
    <cruise>......</cruise> 
    ....... 

或這樣。

<itinerary> 
    <leg date =""> 
    <flights>.....</flights> 
    <accommodation>......</accommodation> 
    <cruise>......</cruise> 
    ....... 
    </leg> 
    <leg date = ""> 
    ...... 
    </leg> 

它是最好用java/mysql的理清分組或XSL? 哪種方式更好? 任何幫助非常感謝,並希望這是有道理的。

UPDATE:

這裏是獲取航班的SQL細節很多,比如同樣的巡航,住宿等

SELECT 
    flightDate, air1.airportName, air2.airportName, 
    flightNumber, departureTime, arrivalTime 
FROM itinerary 
LEFT JOIN flights ON flights.itineraryID = itinerary.itineraryID 
LEFT JOIN airports air1 ON air1.airportID = flights.flightFrom 
LEFT JOIN airports air2 ON air2.airportID = flights.flightTo 
LEFT JOIN bookings ON itinerary.bookingID = bookings.bookingID 
WHERE bookingRef='" + bookingRef + "'"; 

在SQL編輯器(SQLyog的)這個返回結果優良,在Java系統輸出沒問題,但在編組時只添加適當的次數。 (我假設的結構問題)。

真正的問題是我最好把所有的查詢放入一個而不是四個單獨的,因爲它們非常相似?使用外/右連接等(被這些困惑)?

自從我做了SQL以來,它已經很長時間了。

進一步更新:

是否更改了SQL語句之後,似乎更接近理想的結果,但如果不定義第二表列名中的其他表中的列顯示它們。

SELECT 
    flightDate, air1.airportName, air2.airportName, flightNumber, 
    departureTime, arrivalTime 
FROM itinerary 
LEFT OUTER JOIN 
    flights ON itinerary.itineraryID = flights.itineraryID 
LEFT JOIN 
    airports AS air1 ON air1.airportID = flights.flightFrom 
LEFT JOIN 
    airports AS air2 ON air2.airportID = flights.flightTo 
LEFT JOIN 
    bookings ON bookings.bookingID = itinerary.bookingID 
WHERE 
    bookings.bookingRef = '000001' 
UNION 
    SELECT 
    accommodationDate, accommodationName, duration, roomType, boardBasis, 
    notes 
    FROM 
    itinerary 
    LEFT OUTER JOIN 
    accommodation ON itinerary.itineraryID = accommodation.itineraryID 
    LEFT JOIN 
    bookings ON bookings.bookingID = itinerary.bookingID 
    WHERE 
    bookings.bookingRef = '000001'; 

任何幫助表示讚賞。

回答

0

如果您創建行程的第二個XML版本(/itinerary/leg/<resource>),創建打印版本會更容易,因爲數據結構和打印結構相匹配。

但是,查詢數據庫時可能更容易創建第一個版本。

最後,你需要決定哪一個更容易編碼。最有可能的SQL在分組方面比XSL更好。

+0

這就是我正在帶領的目標。現在我只是與SQL分組混淆。可能會回來...... –

+0

SQL分組評論只是在黑暗中拍攝的。您沒有顯示SQL結構,因此我們無法估計生成XML版本2有多困難。 – wero