2016-10-04 72 views
1

我有有那种结构的XML文件:爪哇的SimpleXML在一个路径不同的前缀

<a:root> 
    <a:body> 
     <b:do_action> 
     <b:do_input> 
      <request> 
       <!-- There are a lot of primitive elements --> 
      </request> 
     </b:do_input> 
     </b:do_action> 
    </a:body> 
</a:root> 

我试图用SimpleXML解析这个XML:

public class Request { 
    // There are a lot of defined primitive elements 
} 

@Root(name = "root") 
@Namespace(prefix = "a") 
public class Root { 

    @Path("a:body/b:do_action/b:do_input") 
    @Element(name = "request") 
    public Request request; 
} 

当我实例化我的对象,并希望将其显示为字符串,我得到这个错误信息:

org.simpleframework.xml.core.ElementException: Namespace prefix 'b' in class Request is not in scope 

如何处理具有不同前缀的路径?

回答

1

由于您使用两个不同的命名空间,你应该申报他们两个:

@Root(name = "root") 
@NamespaceList({ 
    @Namespace(prefix = "a" , reference="ref_a"), 
    @Namespace(prefix = "b", reference="ref_b")}) 
public class Root { 
} 

希望它能帮助。

+0

我删除了所有在我的代码中的@Namespace()注解,然后在我的类的顶部添加了@ NamespaceList。当我启动它时,现在它会引发错误:'类请求中的名称空间前缀'a'不在范围内' –

+0

您是否至少为其中一个名称空间指定了'引用'属性?请注意,此属性是一个URI,它为每个名称空间提供了一个唯一的名称,因此您不应该将它们都留空。 – eltabo