java - Jackson的节点结构可以用来写XML吗?

标签 java xml jackson

我正在尝试设置代码来使用 jackson 创建节点树,然后可以使用该代码来编写 JSON 或 XML。我可以让 JSON 工作,但我希望它也能以这种方式输出 XML。

我的示例树如下所示:

XmlMapper NodeMap = new XmlMapper();

ObjectNode rootNode = NodeMap.createObjectNode();
ObjectNode currentNode = rootNode.putObject("Examples");
currentNode
        .put("Puppy", TRUE)
        .put("Apple", 2)
        .put("Jet", "Li");
currentNode = rootNode.putObject("Single");
currentNode.put("One", 1);

使用这棵树我可以使用

String xml = rootNode.toString();

获取

{"Examples":{"Puppy":true,"Apple":2,"Jet":"Li"},"Single":{"One":1}}

这表明树已正确构建,但我一直希望它能输出 XML,因为我将树附加到 XmlMapper。不幸的是,仅此一点似乎还不够。

我知道我可以拿另一个物体做类似的事情

XmlMapper XMap = new XmlMapper();
XMap.writeValue(new File(writePath), objectToBeConverted);

获取 XML,但我希望使用上面的节点树,而 .writevalue 似乎不适用于节点。

我如何获取上面的树并以 XML 形式输出(到字符串或文件)?这种方法有可能吗?还是我运气不好?

编辑:我正在使用 Jackson 版本 2.9.2
编辑2:结果我有多个版本的 jackson 重叠,正如andrii在他的答案下的评论中提到的那样。

最佳答案

您应该使用writeValueAsString,例如:

    XmlMapper mapper = new XmlMapper();

    com.fasterxml.jackson.databind.node.ObjectNode rootNode = mapper.createObjectNode();
    ObjectNode currentNode = rootNode.putObject("Examples");
    currentNode
            .put("Puppy", true)
            .put("Apple", 2)
            .put("Jet", "Li");
    currentNode = rootNode.putObject("Single");
    currentNode.put("One", 1);

    String xml = mapper.writeValueAsString(rootNode);

此外,我认为您使用的是不兼容的依赖版本。我能够通过 jackson-dataformat-xml:2.9.2 和旧的 jackson-core:2.6.7 重现您的错误。确保您使用 jackson-dataformat-xml 依赖项的兼容版本。

关于java - Jackson的节点结构可以用来写XML吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56384866/

相关文章:

java - 如何反序列化 Map<String, Object> 使用不同类型的不同 key 与 jackson ?

java - Spring中的任务执行与调度

java - EditText 必须至少有 10 个字符?

java - 使用选择排序算法对字符串进行排序

java - 这是解码 InputStream 时 BitmapFactory 的错误吗?

java - 从 xml 获取 img 标签

java - 在某些情况下如何忽略/禁用/恢复/覆盖 JAXB 类级 @XmlJavaTypeAdapter?

java - javax.xml.transform.Transformer 的 pretty-print 输出,仅使用标准 java api(缩进和 Doctype 定位)

java - 使用构建器模式编码解码不可变对象(immutable对象)的最佳方法

java - 无法使用 Jackson 解析 XML,模型永远不会被填充