我正在尝试设置代码来使用 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/