首先,我有一个包含对commentType对象的引用的XSD:
...
<xs:complexType>
<xs:sequence>
<xs:element name="entry" type="ref:commentType">
...
commentType被描述为(相同的XSD):
...
<xs:complexType name="commentType" mixed="true">
<xs:annotation>
<xs:documentation>Some text</xs:documentation>
</xs:annotation>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:any/>
</xs:sequence>
<xs:attribute name="date" type="xs:dateTime" use="required"/>
<xs:attribute name="type" use="optional" default="PRODUCT">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="PRODUCT"/>
<!--Several values-->
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
...
在我使用Jaxb解析的XML文件中,entry引用了一个opDetails对象,该对象在另一个XSD中定义...
...
<entry date="2010-03-26T10:40:27Z" type="PRODUCT">
<opDetails xmlns="http://path/to/opDetails">
<!--Object properties-->
</opDetails>
...
(为了清晰起见,我简化了名称和结构)
问题:
如何正确映射我的代码中的其他对象?
我有一个entry.getContent(),它是TinyElementImpl的列表。
显然,生成2 xsd的类并尝试将TinyElementImpl转换为opDetails不是一种选择:)
答案 0 :(得分:0)
我找到了答案
unmarshall也适用于节点。 http://docs.oracle.com/javaee/5/api/javax/xml/bind/Unmarshaller.html
我的代码:
org.w3c.dom.Node nodeEntryContent = (org.w3c.dom.Node)entry.getContent().get(0);
JAXBContext ctx;
Unmarshaller um;
opDetails dOp = null;
try {
ctx = JAXBContext.newInstance("package.of.opDetails.containing.xjc.generated.classes");
um = ctx.createUnmarshaller();
dOp = (opDetails)um.unmarshal(nodeEntryContent);
} catch (JAXBException e1) {
System.out.println("XML parsing error" + e1.getMessage());
}