что именно происходит при сортировке файла XML - PullRequest
1 голос
/ 09 ноября 2011

Предположим, у меня есть XML-файл с несколькими узлами и дочерними элементами. Я использую jaxb (unmarshalling & marshalling) для обновления XML-файла, когда требуется, но хотел знать, что именно происходит, когда ..... ??

<parent>
    <node>abc</node>
</parent>

Теперь я хотел обновить этот XML, добавив <node>xyz</node>, так что я делаю

  1. Удалите этот XML-файл в Java-объект и добавьте этот новый узел в качестве Java-объекта.

  2. Маршалл обновленного файла Object to XML.

мой вопрос: что происходит, когда мы собираем java-объект в xml-файл?

опция a) xml файл удаляет все и пишет заново.

опция b) XML-файл обновляется только путем добавления новой строки.

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

По умолчанию содержимое переопределяется.

Только если вы используете m.marshal(jaxbObj, new FileOutputStream(file, true)) (append = true), новый контент будет добавлен.

1 голос
/ 09 ноября 2011

Если вы строго говорите о File объектах, то ответ , данный Божо , верен.Если вы рассматриваете представление DOM, то JAXB предлагает оба подхода:

Unmarshaller / Marshaller

В следующем коде originalDOM! = MarshalledDOM.

Node originalDOM;  // Populate original document

JAXBContext jc = JAXBContext.newInstance(Customer.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Customer customer = (Customer) unmarshaller.unmarshal(orginalDocument);

Marshaller marshaller = jc.createMarshaller();
marshalledDOM = marshaller.getNode(customer);

Binder

При использовании Binder поддерживается связь между объектами и узлами DOM, с которых они были отменены.Если вы измените немаршаллированный объект, Binder позволит вам применить эти изменения обратно к исходному DOM.Этот подход очень полезен, когда в документе есть несопоставленное содержимое, которое необходимо сохранить (например, комментарии и инструкции по обработке).

    JAXBContext jc = JAXBContext.newInstance(Customer.class);

    Binder<Node> binder = jc.createBinder();
    Customer customer = (Customer) binder.unmarshal(document);
    customer.getAddress().setStreet("2 NEW STREET");
    binder.updateXML(customer);

Для получения дополнительной информации

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