繁体   English   中英

Java XSL / XML JAXB

[英]Java XSL/XML JAXB

我目前正在尝试创建可以由4种可能的类型组成的旅行路线。 这些是航班,住宿,游轮和其他(租车等)。

我将这些值从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吗? 哪一种方法更好? 非常感谢您的帮助,希望这是有意义的。

更新:

这是用于获取航班详细信息的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';

任何帮助表示赞赏。

如果您创建行程的第二个XML版本( /itinerary/leg/<resource> ),则因为数据结构和打印结构匹配,所以创建打印版本将更加容易。

但是,也许在查询数据库时更容易创建第一个版本。

最后,您需要确定哪个更容易编码。 SQL最有可能比XSL更好地进行分组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM