java jdom xml копирует раздел xml

#java #xml #jdom

#java #xml #jdom

Вопрос:

Позвольте мне сначала показать вам структуру xml:

 <config>

   <engine>
     <eid>1</eid>
     <somechild>text</somechild>
     <somemodechild>
       <subchild>subchbild</subchild>
     <somemorechild>
   </engine>
     <eid>1</eid>
     <somechild>text</somechild>
     <somemodechild>
       <subchild>subchbild</subchild>
     <somemorechild>
   </engine>
   <engine>
     <eid>1</eid>
     <somechild>text</somechild>
     <somemodechild>
       <subchild>subchbild</subchild>
     <somemorechild>
   </engine>
   </engine>
     <eid>1</eid>
     <somechild>text</somechild>
     <somemodechild>
       <subchild>subchbild</subchild>
     <somemorechild>
   </engine>
   <engine>
     <eid>1</eid>
     <somechild>text</somechild>
     <somemodechild>
       <subchild>subchbild</subchild>
     <somemorechild>
   </engine>

</config>
  

Здесь <config> находится корневой элемент. Мне нужно создать графический интерфейс для редактирования xml-элемента. Я сделал это, используя JSP, и создал графический интерфейс для каждого из них <engine> на одной странице, чтобы каждый пользователь мог редактировать определенные <engine> , а затем сохранять <config> элементы, и чтобы сохранить изменения в этом конкретном <engine> теге, я использую eid для выделения конкретного <engine> .

Теперь я хочу переписать конкретный <engine> редактируемый файл в отдельный xml. Как я могу достичь этого с помощью jdom?

Комментарии:

1. Смотрите это

Ответ №1:

Не уверен, правильно ли я понимаю ваши требования: у вас есть xml-файл (файл A), указанный выше, как указано выше, и другой XML-файл (файл B), содержащий только один узел ядра.

Если у вас есть уникальный идентификатор (eid?) в файле A, проанализируйте его в своем DOM, а затем замените узел, где eid совпадает с eid в файле B.

Чтобы найти движок в файле A, который соответствует eid в файле B, вы могли бы использовать XPath.

 Node aEID = xp.evaluate("/config/engine[eid='3']"); 
Node bEID = docB.getRoot();
  

затем вы удалили бы aEID из своего первого DOM

 docA.remove(aEID);
  

и добавьте bEID

 docA.getRoot().add(bEID);
  

(приведенный выше код не предназначен для компиляции)