Java XSL/XML JAXB

标签 java mysql xml xslt 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 更擅长分组。

关于Java XSL/XML JAXB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32704152/

相关文章:

c# - 用于检索所有子节点的 Linq-to-XML

java - 如何使用数据库中的内容在页脚中创建表格

java - 在 Java 中使用翻转参数调用方法

sql-server - 从 Nvarchar(MAX) 返回 XML 数据

php - Cakephp 3 模型查找失败并包含匿名函数

php - 选择适当的行——或者获取默认行

java - 如何对齐底部文本区域中的文本?

java - 如何按条件计算所有行且不超过 10

java - Java 中的结构列表

mysql - 有什么库可以将 mysql 表中的大量 IP 地址解析为国家/地区名称或大陆吗?