【发布时间】:2017-01-26 02:51:41
【问题描述】:
我在TradeMessage.dtd 文件中有一个 DTD 架构(这是最小的工作示例)
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT BpsaMessage (BuyMessage | SellMessage)>
<!ATTLIST BpsaMessage
unique_id CDATA #REQUIRED
>
<!ELEMENT BuyMessage (account)>
<!ATTLIST BuyMessage
db_apply CDATA #REQUIRED
>
<!ELEMENT account EMPTY>
<!ATTLIST account
client_nbr CDATA #REQUIRED
>
<!ELEMENT SellMessage (account)>
<!ATTLIST SellMessage
db_apply CDATA #REQUIRED
>
<!ELEMENT account EMPTY>
<!ATTLIST account
action CDATA #REQUIRED
>
并尝试使用该命令为其生成一组Java类
xjc -dtd -d result_folder -p org.company.model TradeMessages.dtd
很遗憾,我遇到了错误
parsing a schema...
[ERROR] Element "account" was already declared
line 18 of file:/C:/Dev/Programs/Java/jdk1.8.0_60/bin/TradeMessage.dtd
Failed to parse a schema.
问题:
如何将
SellMessage中的account元素重命名为例如sellAccount与xjc绑定文件用于解决此名称冲突?如何自定义绑定以将
BuyMessage类放入org.company.model.buy和SellMessage类放入org.company.model.sell单独的包中?是否可以指定绑定以省略
TradeMessage.dtd中除BpsaMessage、SellMessage和BuyMessage之外的任何其他DTD 模式声明?
【问题讨论】:
-
DTD 中不能有重复的元素声明。如果您愿意在对象中使用冗余字段,则可以将这两个属性作为 #IMPLIED 添加到单个定义中,或者您可以改用 xsd。
-
@teppic 实际上这不是我的 DTD。它是来自独立系统的 DTD,它向我们发送 XML 消息。我无法更改或修复它。但是我需要为 JAXB XML unmarshaller 生成一组 Java 类。