作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试使用 JAXB 定义 XML 到 Java 对象的绑定(bind)。一切正常,除非我尝试生成 XML,如this:
<request>
Get Price
<sessionId>read-only</sessionId>
</request>
来自 类定义为this 的对象:
@XmlRootElement(name="request")
public class Request {
@XmlValue
public String getCommandID() { return "Get Price"; };
@XmlElement
public String getSessionID() { return "read-only"; };
}
我收到以下异常:
If a class has @XmlElement property, it cannot have @XmlValue property.
如果我将“sessionId”元素更改为一个属性,一切正常,但我当然希望它成为一个元素。
我认为 JAXB 应该非常灵活,我确信我遗漏了一些明显的东西。
你能帮忙吗?
最佳答案
您要映射的 XML 文档类型称为具有“混合内容”。相应的 XML 架构如下所示:
<xs:element name="request">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="sessionId" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
这意味着文本节点可以与元素节点混合出现。虽然转换示例文档的规则看似微不足道,但以下文档也有效且规则不太明确。
<request>
Get Price
<sessionId>read-only</sessionId>
More Text
</request>
混合文本有其用途,但通常不受欢迎。首选方法是使用问题中所述的 XML 属性:
<request sessionId="read-only">Get Price</request>
要了解 JAXB 如何处理混合文本,请参阅 @XmlMixed
注释:
关于java - JAXB "If a class has @XmlElement property, it cannot have @XmlValue property.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8515375/
我是一名优秀的程序员,十分优秀!