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

У меня есть XML со следующим шаблоном:

<tag1 attr1 = "value1" attr2 = "value2">
    <tag2> text </tag2>
    <tag3> another text </tag3>
</tag1>

Я хочу извлечь этот xml в POJO, который имеет 2 текстовых поля как String и 2 поля для атрибутов, но я не совсем понимаю, как использовать JacksonXmlText.

Что вы уже пробовали в своем Java-коде? Как вы определили классы tag1, tag2, tag3? (если вы это сделали)

Brank Victoria 22.01.2019 13:08

Вот хороший пример того, как это сделать: tutorialspoint.com/java_xml/java_dom_parse_document.htm Пример содержит как имена тегов, так и атрибуты, которые вы ищете.

Sam 22.01.2019 13:57

Мне нужно решение, использующее библиотеку Джексона из fastxml. У меня уже есть сериализация JSON с Джексоном.

Andrew 22.01.2019 15:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
413
1

Ответы 1

Во-первых, начните с некоторых учебников. Например, взгляните на эту страницу: Преобразование XML в JSON с помощью Джексона.

Некоторые ключевые моменты:

  1. Используйте com.fasterxml.jackson.dataformat.xml.XmlMapper для сериализации/десериализации XML
  2. Используйте аннотацию из этого пакета com.fasterxml.jackson.dataformat.xml.annotation

Ваш код может выглядеть следующим образом:

import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;

public class Main {

    public static void main(String[] args) throws Exception {
        XmlMapper mapper = new XmlMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);

        Tag1 tag1 = new Tag1();
        tag1.setTag2("text");
        tag1.setTag3("another text");
        tag1.setAttribute1("value1");
        tag1.setAttribute2("value2");
        String xml = mapper.writeValueAsString(tag1);
        System.out.println(xml);

        System.out.println(mapper.readValue(xml, Tag1.class));
    }
}

@JacksonXmlRootElement(localName = "tag1")
class Tag1 {

    private String attribute1;
    private String attribute2;
    private String tag2;
    private String tag3;

    @JacksonXmlProperty(isAttribute = true)
    public String getAttribute1() {
        return attribute1;
    }

    public void setAttribute1(String attribute1) {
        this.attribute1 = attribute1;
    }

    @JacksonXmlProperty(isAttribute = true)
    public String getAttribute2() {
        return attribute2;
    }

    public void setAttribute2(String attribute2) {
        this.attribute2 = attribute2;
    }

    public String getTag2() {
        return tag2;
    }

    public void setTag2(String tag2) {
        this.tag2 = tag2;
    }

    public String getTag3() {
        return tag3;
    }

    public void setTag3(String tag3) {
        this.tag3 = tag3;
    }

    @Override
    public String toString() {
        return "Tag1{" +
                "attribute1='" + attribute1 + '\'' +
                ", attribute2='" + attribute2 + '\'' +
                ", tag2='" + tag2 + '\'' +
                ", tag3='" + tag3 + '\'' +
                '}';
    }
}

Над кодом печатается:

<tag1 attribute1 = "value1" attribute2 = "value2">
  <tag2>text</tag2>
  <tag3>another text</tag3>
</tag1>

Tag1{attribute1='value1', attribute2='value2', tag2='text', tag3='another text'}

Другие вопросы по теме

Пропустить десериализацию элемента и получить весь контент в виде строки при разборе xml в java
Что сериализует JsonFormat.Shape.NUMBER_INT для LocalDate?
Как заставить API Spring Boot возвращать время UTC для значений даты MySQL вместо «2018-08-01T04:00:00Z»?
Основной метод не найден в классе jsone.testing, определите основной метод как: public static void main(String[] args)
Java.lang.NoSuchMethodError: com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator.getOutputContext() после обновления wildfly
Java Jackson использует другое имя свойства
Почему POJO предназначены для сериализации/десериализации в JSON, обычно содержащихся в пакете «сущностей»? Что означает «сущности»?
Джексон: часовой пояс отличается от системного часового пояса по умолчанию?
Невозможно построить экземпляр `com.test.FilterModel`. Нет конструктора/фабричного метода строкового аргумента для десериализации строкового значения
Преобразование сложного json в объект (scala, jackson)