所以这是一个我还没有解决的有趣的...我将从代码开始,然后是一些背景。
public void encodeElements(String path) throws Exception {
LOGGER.warning("Marshalling config to " + path);
JAXBContext ctx = JAXBContext.newInstance(RootElement.class);
Marshaller marshaller = ctx.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
RootElement ele = new RootElement();
ele.setDummyField("abc");
QName qName = new QName("http://localhost/xml-schemas/mySchema", "rootelement");
JAXBElement<RootElement> root = new JAXBElement<RootElement>(qName, RootElement.class, ele);
marshaller.marshal(root, new FileOutputStream(path));
}
此应用的GUI上有一个“另存为”选项。每次调用此函数时,它都会覆盖使用“另存为”功能保存的上一个文件。例如:
JAXBContext.newInstance()
会用1.xml的内容覆盖1.xml,并创建一个有效的2.xml。区分这两个文件显示它们实际上是相同的。重复此过程始终会覆盖上次保存的文件。 (IE另存为3.xml将覆盖2.xml并创建相同的3.xml,依此类推)。
JAXBContext ctx = JAXBContext.newInstance(RootElement.class);
是覆盖前一个文件的行。
答案 0 :(得分:0)
原来问题在于:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/alchemyjs/0.4.2/styles/vendor.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/alchemyjs/0.4.2/scripts/vendor.js"></script>
<script src="lodash.js"></script>
</head>
<body>
<div class="alchemy" id="alchemy"></div>
<script type="text/javascript">
alchemy.begin({
dataSource: "../result.json",
dataType:'html',
nodeCaption:'name',
nodeMouseOver:'name',
cluster: true,
clusterColours:["#1B9E77,#D95F02,#7570B3,#E7298A,#66A61E,#E6AB02"]
})
</script>
</body>
</html>
写入完成后,传入的流不会关闭。所以,我们必须自己关闭它:
marshaller.marshal(root, new FileOutputStream(path));
感谢那些看过的人。希望这有助于将来的某个人。