我遇到的问题是我生成的 XML 与我的预期不符。
我有以下 XSD...
<xs:element name="DOSLog" type="DOSLogType"/>
<xs:complexType name="DOSLogType">
<xs:sequence>
<xs:element name="Transaction" type="DOSLogTransaction"/>
</xs:sequence>
</xs:complexType>
当我从这些 JAXB 对象生成 XML 时,我得到以下 XML...
<DOSLogType>
<Transaction/>
</DOSLogType>
我没想到输出的标签是 <DOSLogType>,而是 <DOSLog>。
代码返回 DOSLogType.java 类型的对象
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
name = "DOSLogType",
propOrder = {"transaction"}
)
@XmlRootElement(
name = "DOSLogType"
)
public class DOSLogType implements Cloneable, CopyTo, Equals, HashCode, ToString {
我希望我可以使用 bindings.xjc 控制生成的对象和 XML 标记名称,但这似乎不起作用。
<jaxb:bindings scd="~arts:DOSLogType"><jaxb:class ref="org.doslog.bean.DOSLogType" /></jaxb:bindings>
谁能建议我如何控制生成的 XML?
====================================
有两种解决方案,如下所示的 XSD 方法。第二个是在 bindings.xjc 中修复它
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
xmlns:annox="http://annox.dev.java.net"
jaxb:extensionBindingPrefixes="inheritance annox"
jaxb:version="2.1">
<jaxb:bindings schemaLocation="DOSLog.xsd" node="/xs:schema">
<jaxb:bindings node="xs:complexType[@name='DOSLogType']">
<annox:annotate>
<annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="DOSLog"/>
</annox:annotate>
</jaxb:bindings>