2014-10-15 2 views
2

Можно ли распаковать в XML-файл, как это:Пропустить XML узлов, а демаршалинга XML с JAXB

<company id="bh23" name="imob"> 
    <store> 
     <store-info id="2392"> 
     <address>NYC</address> 
     <name>Imob's NYC 5th</name> 
     </store> 
     <products> 
     <product> 
      <name>keyboard</keyboard> 
      <price>2000</price> 
     </product> 
     <product> 
      <name>mouse</keyboard> 
      <price>1000</price> 
     </product> 
     </products> 
    </store> 
    <store /> 
</stores> 

на классы, подобные этим:

@XmlElementRoot(name = "company") 
public class Company { 

    @XmlAttribute (name = "id") 
    String id; 
    @XmlAttribute (name = "name") 
    String name; 
    @XmlElement (name = "store") 
    List<Store>stores; 

    //all the getters and setters 
} 


@XmlElementRoot (name = "store") 
public class Store { 

     @XmlAttribute (name = "id") 
     String id; 
     @XmlElement (name = "address") 
     String address; 
     @XmlElement (name = "name") 
     String name; 
     @XmlElementWrapper (name = "products") 
     @XmlElement (name = "product") 
     List<Product>products; 

     //all the getters and setters 
    } 

    public class main { 
     public static void main (String args[]) { 
     try { 
      JAXBContext jaxbContext = JAXBContext.newInstance(Company.class); 
      Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
      Company portfolio = (Company) jaxbUnmarshaller.unmarshal(new File(xmlUrlPath)); 
      System.out.println(portfolio.toString()); 
     } catch (JAXBException e) { 
      e.printStackTrace(); 
     } 
     } 
    } 

Я пытаюсь «пропустить» или «прыгать» в узел с именем «store-info», потому что я не хочу создавать другой класс, просто чтобы сохранить адрес и имя магазина, так как было бы проще «добавить» и адрес, и имя в класс «Store». Конечно, когда я запускаю код, «адрес», «id» и «name» vars становится нулевым, и только список продуктов корректно отменяется. Есть ли способ пропустить узел, объединив свои поля в другой класс? Я избегаю (для «законных» целей) использования MOXy lib и их аннотации XPath.

ответ

1

Вы можете создать StAX filter XMLStreamReader и отключить JAXB, чтобы игнорировать один или несколько элементов XML.

Ниже приводится ссылка на полный пример, который я дал в ответ на аналогичный вопрос: