2016-10-04 8 views
1

у меня есть XML-файл, который имеет такую ​​структуру:Java, 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> 

Я пытаюсь разобрать этот XML с помощью SimpleXML:

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

»Вы указываете атрибут« reference »как минимум для одного из пространств имен? Обратите внимание, что этот атрибут является URI, чтобы дать каждому пространству имен уникальное имя, поэтому вы не должны оставлять их пустыми. – eltabo