java - 将子 XML 元素反序列化为 XML 字符串

标签 java xml jackson jaxb jackson-dataformat-xml

使用 Jackson 或 JAXB,有没有办法将子 XML 元素的整个子树反序列化/编码为字符串?

例如,给定以下 XML:

<root>
  <foo>
    <bar>
      <baz/>
    </bar>
  </foo>
</root>

有没有办法将其反序列化/编码到以下类

@XmlRootElement
public class Root {
    private String foo;

    // constructors, getters, setters, etc.
}

结果如下 Root(foo="<bar><baz/></bar>")

最佳答案

您可以为此编写自己的 jackson 反序列化器:

public class Test {
  public static void main(String[] args) throws Exception {
    ObjectMapper mapper = new XmlMapper();
    final SimpleModule module = new SimpleModule("configModule",   Version.unknownVersion());
    module.addDeserializer(Root.class, new DeSerializer());
    mapper.registerModule(module);
    // Root readValue = mapper.readValue(<xml source>);
  }
}

class DeSerializer extends StdDeserializer<Root> {

  protected DeSerializer() {
    super(Root.class);
  }

  @Override
  public Root deserialize(JsonParser p, DeserializationContext ctxt) throws Exception {
    // use p.getText() and p.nextToken to navigate through the xml and construct Root object
    return new Root();

  }
}

关于java - 将子 XML 元素反序列化为 XML 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52169960/

相关文章:

java - 如何移动微调下拉菜单以便可以看到所选的选项?

java - com.fasterxml.jackson.databind.JsonMappingException : Can not deserialize instance of org. springframework.data.domain.Sort out START_ARRAY token

Java 支持 json 测试吗?

java - 如何在前台启动文件?

java - 即使同步方法也会生成相同的 UUID

java - 如何编写有文件大小限制的XML?

java - 具有多个数据源和外部配置的 Spring Boot、Spring JPA

java - 使用 SAX 解析器解析包含特殊字符 "/"的值给出错误的输出

java - Jackson - 序列化包含空元素的列表

Jackson 的constructParametricType 已被弃用,但constructParameterizedType 的工作方式不同