Вопрос Xstream и объект Java - PullRequest
       1

Вопрос Xstream и объект Java

0 голосов
/ 23 августа 2010

Я хочу построить Java-объекты

<placement_rules>
  <section name="news">
    <front_order>
       <article_type name="article1"></article_type>
       <article_type name="article2"></article_type>
    </front_order>
    <back_order>
       <article_type name="article3"></article_type>
    </back_order>
  </section>
  <section name="sports">
    <front_order>
      <article_type name="article4"></article_type>
    </front_order>
    <back_order>
      <article_type name="article5"></article_type>
      <article_type name="article6"></article_type>
    </back_order>
  </section>
</placement_rules>

Какие объекты мне нужно создать?

я начинаю изнутри SectionRule.java

@XStreamAsAttribute
@XStreamAlias("name")
private String sectionName;

@XStreamAlias("front_order")
private List<ConfigPlacementNode> frontOrder = new ArrayList<ConfigPlacementNode>(0);

@XStreamAlias("back_order")
private List<ConfigPlacementNode> backOrder = new ArrayList<ConfigPlacementNode>(0);

как мне создать вокруг него другие объекты первого класса? любая помощь будет высоко оценена.

С уважением, Амар

1 Ответ

1 голос
/ 23 августа 2010

Я никогда не использовал XStream, но следующую объектную модель можно использовать для представления вашего XML-документа. Я включил стандартные аннотации JAXB (включенные в Java SE 6) для демонстрации сопоставления XML.

PlacementRules

import java.util.List;
import javax.xml.bind.*;

@XmlRootElement(name="placement_rules")
@XmlAccessorType(XmlAccessType.FIELD)
public class PlacementRules {

    private List<Section> section;

}

Раздел

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
public class Section {

    @XmlAttribute
    private String name;

    @XmlElementWrapper(name="front_order")
    @XmlElement(name="article_type")
    private List<Article> frontOrderArticles;

    @XmlElementWrapper(name="back_order")
    @XmlElement(name="article_type")
    private List<Article> backOrderArticles;

}

Статья

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
public class Article {

    @XmlAttribute
    private String name;

}

Ниже приведен пример программы, демонстрирующей ее работу:

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext context = JAXBContext.newInstance(PlacementRules.class);

        Unmarshaller unmarshaller = context.createUnmarshaller();
        File xml = new File("src/forum38/input.xml");
        PlacementRules placementRules = (PlacementRules) unmarshaller.unmarshal(xml);

        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(placementRules, System.out);
    }
}
...