JAXB получает значение атрибута от child - PullRequest
0 голосов
/ 07 февраля 2020

Я не могу получить информацию об атрибутах от Child в xml. Я попробовал несколько разных подходов, и ни один из них не сработал. (получение информации об атрибутах от родителя работает нормально)

  • Я работаю с библиотекой JAXB
  • XML вложено - + 300K строк

Здесь короткая версия на моем XML

<HarnessContainer xsi:noNamespaceSchemaLocation="xxx" Signature="15D823AAFC2CC91A61E1755C76E621"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Harness HarnessName="" HarnessDate="13.08.2019">
        <!--...-->
    </Harness>
</HarnessContainer>

Вот мой родительский класс

@XmlRootElement(name = "HarnessContainer")
@XmlAccessorType(XmlAccessType.FIELD)
public class HarnessContainer implements Serializable {


    private Harness harness;
    @XmlAttribute(name = "Signature")
    private String Signature;

    public HarnessContainer() {
    }

    public HarnessContainer(Harness harness, String signature) {
        this.harness = harness;
        Signature = signature;
    }
    //setters and getters
}

Вот мой дочерний класс

@XmlRootElement(name = "Harness")
@XmlAccessorType(XmlAccessType.FIELD)
public class Harness implements Serializable {


    @XmlAttribute(name = "HarnessDate")
    private String harnessDate;

    public Harness() {
    }

    public Harness(String harnessDate) {
        this.harnessDate = harnessDate;
    }
    //setters and getters
}

Это вызывающий класс

   public class main {

    public static void main(String[] args) throws JAXBException, IOException {

        File xmlFile = new File("C:\\Users\\Mini\\Desktop\\Desktop\\file.xml");
        JAXBContext jaxbContext;
        try {
            jaxbContext = JAXBContext.newInstance(HarnessContainer.class);
            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

            HarnessContainer harnessContainer = (HarnessContainer) jaxbUnmarshaller.unmarshal(xmlFile);

            System.out.println(harnessContainer.getHarness().getHarnessDate());

        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

Я решил использовать @XmlAccessorType (XmlAccessType.FIELD), потому что я планирую иметь много полей, и этот тип аксессуара, кажется, подходит для этого. Я также пробовал разные аннотации, но они не работали.

1 Ответ

0 голосов
/ 07 февраля 2020

Ваша проблема не в том, что атрибут Harness XML не отображается, ваша проблема в том, что весь объект Harness не отображается.

Это потому, что имя элемента по умолчанию - не имя в XML. Чтобы исправить, укажите имя:

@XmlElement(name = "Harness")
private Harness harness;

Поле harness теперь не будет нулевым, а harnessDate не будет нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...