javascript - xml builder root 正在跟踪以前的值并复制结果,但也无法使其为空
问题描述
我尝试搜索答案,但由于 XMLBUILDER 上的问题数量有限,无法找到。因此,如果发现重复问题,真的很抱歉。
我正在使用XMLBUILDER
Node.js 模块为我的项目创建 XML。我有一个可以为我创建 XML 的函数,但由于某种原因,该root
元素总是存储以前的值,因此每次 XML 都会附加以前的值,我得到它两次。
这是创建 XML 的 Node.js 控制器:
var root = builder.create('Header')
root.att(currentTime)
exports.createXMLData = function(Query,callback){
var input = Query.input;
var OuterTag = root.ele(input.Type)
//Add the time to XML
OuterTag.ele('time', input.EventTime).up()
//Add the reason to the XML
OuterTag.ele('reason',input.ErrorReason)
//Like this I have many more tags
xml = root.end({ pretty: true});
callback(xml);
}
我有一个包含一组值的数组,我需要创建一个 XML 来附加所有值,所以我将其放置在root
外部,因为我不希望每次都添加标题。对于数组中的每个元素,我将调用该函数createXMLData
,以便可以创建所需的 XML,并且可以将自己附加到 XML,但是每次调用此函数时,它都会跟踪以前的值,并且我会得到新的值以前的值。
例如:如果我在数组中有 2 个元素并单击 SUBMIT 按钮以创建 XML,那么首先它会使用 2 个元素正确创建 XML,但是当我再次单击它时,它将再次创建 XML 以及以前的值所以我会得到4个元素。
我知道如果将root
标签放在函数中,那么我会为数组中我不想要的每个元素获取两次 Header。我只想为整个 XML 提供 1 个标头。我尝试使用函数内的 清空根元素,root = ""
但它会引发一些错误。
我确信这是我遗漏的一些小东西,但我无法弄清楚。有人可以帮我吗?
因此,当我第一次创建时,我会得到类似这样的 XML:
<?xml version="1.0"?>
<header>
<time> 2020-08-20T09:35:25+02:00 </time>
<reason> dummyReason </reason>
<time> 2020-08-20T09:35:30+02:00 </time>
<reason> dummyReason </reason>
</header>
如果我通过单击提交按钮再次创建,那么我会得到如下信息:
<?xml version="1.0"?>
<header>
<time> 2020-08-20T09:35:25+02:00 </time>
<reason> dummyReason </reason>
<time> 2020-08-20T09:35:30+02:00 </time>
<reason> dummyReason </reason>
<time> 2020-08-20T09:36:25+02:00 </time>
<reason> dummyReason </reason>
<time> 2020-08-20T09:36:30+02:00 </time>
<reason> dummyReason </reason>
</header>
请注意,我不是每次调用数组元素时都附加元素。这是由root
元素自动完成的。
解决方案
您能否提供一个示例,说明 XML 现在如何在您的代码中输出以及您希望它如何输出?因为我并不清楚确切的问题是什么。你想追加但你不想:-)
更新: 我想我更清楚地理解了这个问题。我建议创建一个生成 XML 根对象的辅助函数。提交值时,您可以通过创建一个空的新对象来“重置” XMLBuilder 对象。
var builder = require("xmlbuilder");
function setupXML(currentTime) {
var root = builder.create("Header");
root.att(currentTime);
return root;
}
function createXMLData(xmlRoot, query) {
xmlRoot.ele(query.time);
xml = xmlRoot.end({ pretty: true });
};
var items = [
{
time: "time1",
}
];
var currentTime = 'value';
var root = setupXML(currentTime);
items.forEach((item) => {
createXMLData(root, item);
});
推荐阅读
- javascript - 如何在使用 jQuery 的 HTML 表单中使用两个按钮时向烧瓶提交数据
- c++ - string.compare() 函数没有比较正确的字符串
- algorithm - 在给定一些约束的情况下计算所有可能的组合
- csv - 使用 IMPORTDATA() 将 blob (URL) 中的 CSV 导入 Google 表格?
- performance - OpenMP 的效率与优化级别
- redis - 由于权限问题 systemctl 重启失败
- ios - UISplitViewController 在 UITabBarController 内时总是水平紧凑 - iOS 14
- scala - Scala 项目 - 用于访问过去 1、2 或 3 天发布的推文的 API?
- pandas - pandas,只计算最后 n 行
- pandas - 尝试填充纬度/经度列时的所有 NaN 值