【问题标题】:Java XSL/XML JAXBJava XSL/XML JAXB
【发布时间】:2015-12-18 16:19:43
【问题描述】:

我目前正在尝试创建一个可以由 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';

任何帮助表示赞赏。

【问题讨论】:

    标签: java mysql xml xslt jaxb


    【解决方案1】:

    如果您创建行程的第二个 XML 版本 (/itinerary/leg/&lt;resource&gt;),则创建打印版本会更容易,因为数据结构和打印结构匹配。

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

    最后,您需要决定哪个更容易编码。很可能 SQL 在分组方面比 XSL 更好。

    【讨论】:

    • 这就是我的目标。现在我只是对 sql 分组感到困惑。可能会回来......
    • SQL 分组注释只是在黑暗中的一个镜头。您没有展示 SQL 结构,因此我们无法估计生成 XML 版本 2 的难度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    相关资源
    最近更新 更多