杰克逊的节点结构可以用来编写XML吗?

时间:2019-05-30 19:59:21

标签: java xml 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输出(输出到字符串或文件中)?使用这种方法是否可行?

编辑:我正在使用杰克逊2.9.2版

1 个答案:

答案 0 :(得分:1)

您应该使用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);