Как анализировать списки XML с помощью Джексона без особого случая для списков из 1 элемента?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как анализировать списки XML с помощью Джексона без особого случая для списков из 1 элемента?

Сообщение Anonymous »

Я хотел бы использовать Jackson JsonNode для анализа XML-файлов, которые очень часто имеют структуры такого типа:

value 1a
value 1b


value 2a
value 2b




Однако иногда одни и те же списки содержат только один элемент, как этот:


value a
value b




Проблема, с которой я сталкиваюсь при использовании JsonNode, заключается в том, что JsonNode.get("element") возвращает ArrayNode для первого XML, но ObjectNode для второго XML. Я знаю, что это можно обойти с помощью этой строки:
elements = elements.isArray() ? elements : new XmlMapper().createArrayNode().add(elements);

но я хотел бы использовать более простое решение, например, метод JsonNode, который всегда возвращает ArrayNode. Что-то вроде JsonNode.getArray("element") было бы идеально.
Знаете ли вы, можно ли это сделать с помощью Джексона?
Это полный код:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.io.IOException;

public class JacksonTest {

public static void main(String[] args) throws Exception {

String xmlExample1 = """


value 1a
value 1b


value 2a
value 2b


""";

String xmlExample2 = """


value a
value b



""";

processXml(xmlExample1);
processXml(xmlExample2);
}

private static final XmlMapper XM = new XmlMapper();

private static void processXml(String xml) throws IOException {
JsonNode rootNode = XM.readTree(xml);

JsonNode elements = rootNode.get("element");

elements = elements.isArray() ? elements : XM.createArrayNode().add(elements);

for (JsonNode element : elements) {
System.out.println("Value: " + element.get("a").asText());
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... ment-lists
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»