Java, SimpleXML с разными префиксами в одном пути

#java #xml #xml-parsing #xml-serialization #simple-framework

#java #xml #xml-синтаксический анализ #xml-сериализация #simple-framework

Вопрос:

У меня есть XML-файл, который имеет такую структуру:

 <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 {
}
  

Надеюсь, это поможет.

Комментарии:

1. Я удалил все @Namespace() аннотации в своем коде, а затем добавил @NamespaceList их в начало своего класса. Когда я его запустил, теперь он выдает мне ошибку: Namespace prefix 'a' in class Request is not in scope

2. Указываете ли вы атрибут ‘reference’ хотя бы для одного из пространств имен? Обратите внимание, что этот атрибут является URI для присвоения каждому пространству имен уникального имени, поэтому вы не должны оставлять пустыми оба из них.