我目前正在尝试创建一个可以由 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 更擅长分组。
关于Java XSL/XML JAXB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32704152/