Java Jaxb:意外元素(uri:"",local:"Create").预期的元素是<{} Create>

Han*_*ann 5 java xml jaxb blind unmarshalling

我的JAXB有一个问题

<element name="create">
    <complexType>
        <sequence>
            <element name="name" type="string"></element>
        </sequence>
    </complexType>
</element>
Run Code Online (Sandbox Code Playgroud)

我的xml:

<Create>
<name> coco </name>
</Create>
Run Code Online (Sandbox Code Playgroud)

我的代码java:

JAXBContext context = JAXBContext.newInstance("MyPackage");
 Unmarshaller decodeur =    context.createUnmarshaller();
System.out.println("text : " + message);
msgObject = decodeur.unmarshal(sr);  
     if (msgObject instanceof Create)

{
      System.out.println(" action");
}
Run Code Online (Sandbox Code Playgroud)

我有这个:

意外元素(uri:"",local:"Create").预期的元素是<{ http://www.example.org/XSD_Maths } create>

我的代码停止了这个:

 msgObject = decodeur.unmarshal(sr);  
Run Code Online (Sandbox Code Playgroud)

我的xml好吗?你能帮帮我吗,因为我不知道是什么问题

bdo*_*han 13

您的XML Schema可能有schema如下标记.

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/XSD_Maths" 
    xmlns:tns="http://www.example.org/XSD_Maths" 
    elementFormDefault="qualified">
Run Code Online (Sandbox Code Playgroud)

因为它指定targetNamespacehttp://www.example.org/XSD_Maths.您的XML需要如下所示:

<create xmlns="http://www.example.org/XSD_Maths">
    <name> coco </name>
</create>
Run Code Online (Sandbox Code Playgroud)

关于从DOM解组的注意事项

如果您从DOM解组DocumentElement确保您使用的DOM解析器是名称空间感知.这是通过在上面设置以下标志来完成的DocumentBuilderFactory.

documentBuilderFactory.setNamespaceAware(true);
Run Code Online (Sandbox Code Playgroud)

欲获得更多信息

下面是我博客上文章的链接,我将更深入地了解JAXB和命名空间.