Как реализовать атрибуты родительского объекта (реквизиты и значения) для дочерних объектов во время демаршаллинга JAXB XML - PullRequest
0 голосов
/ 17 июня 2019

У меня есть конфигурация XML, которую я должен разархивировать с помощью JAXB, а затем использовать эти объекты в коде Java. У меня есть один родительский объект "теги" и два дочерних тега "innerTag". Все теги имеют атрибуты. Входная конфигурация:

...
<tags attribute1="value1" attribute2="value2">
<innerTag attribute3="value3"/> 
<innerTag attribute4="value4"/>
</tags>
...

Моей задачей является реализация attribute1 и attribute2 для innerTags после демаршалинга. Это должно быть unmarshal, как такой xml:

...
<tags>
<innerTag attribute1="value1" attribute2="value2" attribute3="value3"/> 
<innerTag attribute1="value1" attribute2="value2" attribute4="value4"/>
</tags>
...

Я создаю классы, которые будут представлять объекты после анализа XML:

@XmlRootElement
class Tags {
private ArrayList<InnerTag> innerTags = new ArrayList<>();
private String attribute1;
private String attribute2;
...
@XmlElement(name = "innerTag")
@XmlElementWrapper(name="tags")
public ArrayList<InnerTag> getInnerTags(){
    return innerTags;
   }
...
@XmlAttribute
public String getAttribute1(){
    return attribute1;
   }

@XmlAttribute
public String getAttribute2(){
    return attribute2;
   }
...
}

И класс InnerTag:

@XmlRootElement
class InnerTag {
private String attribute1;
private String attribute2;
private String attribute3;
private String attribute4;
...
@XmlAttribute
public String getAttribute1(){
    return attribute1;
   }

@XmlAttribute
public String getAttribute2(){
    return attribute2;
   }
...
@XmlAttribute
public String getAttribute3(){
    return attribute3;
   }

@XmlAttribute
public String getAttribute4(){
    return attribute4;
   }
}

Я понятия не имею, как реализовать атрибуты и значения родительского атрибута для детей ... Я не нашел такого деструктивного JAXB, который позволил бы мне реализовать такую ​​реализацию атрибутов. Помогите, пожалуйста, решить эту проблему!

1 Ответ

0 голосов
/ 19 июня 2019

попробуйте с этим,

сначала демонтируйте объект Tags

File file = new File("XMLFile.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Tags.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Tags tags = (Tags) jaxbUnmarshaller.unmarshal(file);

, затем значения атрибута (attribute1 и attribute2) tags установите на InnerTag

for (int i = 0; i < tags.getInnerTags().size(); i++) {
    tags.getInnerTags().get(i).setAttribute1(tags.getAttribute1());
    tags.getInnerTags().get(i).setAttribute2(tags.getAttribute2());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...