#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%» на желаемое значение.
Ответ №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 параметрами.
- XmlPath: укажите путь к вашему XML-файлу
- имяэлемЕнта: укажите имя элемента, который вы хотите клонировать. В вашем случае: «элемент»
- 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
}