Дублировать содержимое элемента в XML-файле с помощью JAVA

#java #xml #dom #xml-parsing

#java #xml #dom #синтаксический анализ xml

Вопрос:

Считайте, что это XML-файл

 <rpc>
<edit-config>
<config>
<element>
<name> user%index%</name>
<place> wakanda </palce>
<count> number%index%</count>
</element>
</config>
</edit-config>
</rpc>
 

Мне нужно, чтобы один атрибут элемента дублировался 5 раз, где я заменяю %index% значением от 1 до 5, чтобы вывод выглядел примерно так, как показано ниже, мне нужен Java-код для того же, пожалуйста, помогите мне.

 <rpc>
<edit-config>
<config>
<element>
<name> user1</name>
<place> wakanda </palce>
<count> number1</count>
</element>
<element>
<name> user2</name>
<place> wakanda </palce>
<count> number2</count>
</element>
<element>
<name> user3</name>
<place> wakanda </palce>
<count> number3</count>
</element>
<element>
<name> user4</name>
<place> wakanda </palce>
<count> number4</count>
</element>
<element>
<name> user5</name>
<place> wakanda </palce>
<count> number5</count>
</element>
</config>
</edit-config>
</rpc>
 

Ответ №1:

Я полагаю, что один из самых простых способов сделать это — создать простой цикл for, в котором вы копируете содержимое несколько раз и используете метод String.replace для замены «%index%» на желаемое значение.

String.replace Javadoc

Ответ №2:

У меня была похожая ситуация раньше. Я привел в порядок свою предыдущую работу и разместил ее на github в качестве внешнего jar / open source. https://github.com/tataelm/XmlNodeCloner

Как это использовать?

 XmlNodeCloner xmlNodeCloner = new XmlNodeCloner("src/input.xml", "element", 2);
xmlNodeCloner.setIfCloneLatestOrCertain(true);
xmlNodeCloner.selectCloningElementByTagValue("name", "user1");
xmlNodeCloner.addXmlTagsToEnumerate("name","count");    
xmlNodeCloner.setmEnumeratorStyle(EnumeratorStyle.DEFAULT);
xmlNodeCloner.isAlreadyIterated(true);
xmlNodeCloner.runCloner();
 

Создайте экземпляр XmlNodeCloner с 3 параметрами.

  1. XmlPath: укажите путь к вашему XML-файлу
  2. имяэлемЕнта: укажите имя элемента, который вы хотите клонировать. В вашем случае: «элемент»
  3. cloneCount: является целочисленным значением. Сколько клонов вы хотите иметь из этого элемента

Если вы хотите клонировать определенный узел, убедитесь, что вы вызываете следующие методы. По умолчанию выполняется клонирование последнего узла

 xmlNodeCloner.setIfCloneLatestOrCertain(true);
xmlNodeCloner.selectCloningElementByTagValue("name", "user1");
 

Если вы хотите перечислить определенные узлы, вызовите следующие методы. Параметры — это имена узлов, которые вы хотите перечислить

 xmlNodeCloner.addXmlTagsToEnumerate("name","count");    
xmlNodeCloner.setmEnumeratorStyle(EnumeratorStyle.DEFAULT);
 

Если узел, который вы хотите клонировать / дублировать, уже повторялся один раз, у него будет номер итерации. Вызовите следующий метод, если вы хотите продолжить с предыдущей итерации

 xmlNodeCloner.isAlreadyIterated(true);
 

Существует 5 различных стилей перечисления, определенных в enum. Вы можете вызвать эти стили следующим образом.

 xmlNodeCloner.setmEnumeratorStyle(EnumeratorStyle.DEFAULT);

public enum EnumeratorStyle {
    DEFAULT, DASH, SPACE_DASH_SPACE, UNDERSCORE, SPACE_UNDERSCORE_SPACE
}