Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 访问与Jaxb不在同一XSD中的对象_Java_Xml_Xsd_Jaxb - Fatal编程技术网

Java 访问与Jaxb不在同一XSD中的对象

Java 访问与Jaxb不在同一XSD中的对象,java,xml,xsd,jaxb,Java,Xml,Xsd,Jaxb,首先,我有一个XSD,其中包含对commentType对象的引用: ... <xs:complexType> <xs:sequence> <xs:element name="entry" type="ref:commentType"> ... 。。。 ... commentType描述为(相同的XSD): 。。。 一些文本 ... 在我使用Jaxb解析的XML文件中,条目引用了一个opDetails对象,它在另一个XSD中定义 .

首先,我有一个XSD,其中包含对commentType对象的引用:

...
<xs:complexType>
    <xs:sequence>
        <xs:element name="entry" type="ref:commentType">
...
。。。
...
commentType描述为(相同的XSD):

。。。
一些文本
...
在我使用Jaxb解析的XML文件中,条目引用了一个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不是一个选项:)

我找到了答案

解组也适用于节点。

我的代码:

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());
}

您是否要在“main”xsd中导入其他xsd?我已经尝试过了:This(您的第一个代码块):
没有类似这样的名称:
它是否位于例如有名称的元素中?您使用的工具也可以验证您的xml吗?肯定:所有文件都完全有效。(XMLSpy)我不是唯一一个处理这些文件的人,而且创建这些文件的人都很专业:)好的,只是确认一下:-)
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());
}