【问题标题】:How can I extract content between two XML tags as text using Jackson?如何使用 Jackson 将两个 XML 标记之间的内容提取为文本?
【发布时间】:2019-01-22 12:01:53
【问题描述】:

我有一个带有以下模板的 XML:

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

我想将此 xml 提取到一个 POJO 中,该 POJO 有 2 个文本字段为 String 和 2 个属性字段,但我不太明白如何使用 JacksonXmlText

【问题讨论】:

  • 到目前为止,您在 Java 代码中尝试过什么?您是如何定义类 tag1、tag2、tag3 的? (如果你做到了)
  • 这里有一个很好的示例说明如何执行此操作:tutorialspoint.com/java_xml/java_dom_parse_document.htm 该示例包含您正在寻找的标签名称和属性。
  • 我想要一个使用来自 fastxml 的 Jackson 库的解决方案。我已经用 Jackson 进行了 JSON 序列化。

标签: java jackson jackson-dataformat-xml


【解决方案1】:

首先,从一些教程开始。例如,请查看此页面:Convert XML to JSON Using Jackson

一些关键点:

  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'}

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多