【问题标题】:Builder design pattern in javascriptJavaScript 中的构建器设计模式
【发布时间】:2015-06-26 03:53:24
【问题描述】:

解析 XML 后需要构造自定义 JSON 文件。长话短说,有一个 XML 文件,必须从中创建一个 JSON 文件,但并非所有来自 XML 的信息都必须以 JSON 格式呈现。必须仅使用 JS 和 Node.js 来完成。为了解析 XML,我使用了 xmldom 和 fs。

现在是我陷入困境的部分。要创建 JSON 文件,我不能使用 Web 上已有的代码片段,因为 Node.js 的示例很少,而且我需要从 XML 中省略很多东西。循环也是不可能的,因为 XMLDOM 是递归的。现在我用这段代码来做:

  var builder = function() {
    this.meta = {};
}

builder.atRoot = function(library) {
    this.meta["!name"] = library;
    this.meta["!define"] = {};
    this.define = this.meta["!define"];
}


builder.atNamespace = function(name) {
    this.namespace = {};
    this.namespace["!category"] = "namespace";
    this.namespace["!description"] = "";
    this.define[name] = this.namespace;
}

builder.atDescription = function(method){
    this.class = {};
    this.class["!Accordion"] = method;
    this.class["!AccordionSection"] = method;
    this.class["!ApplicationHeader"] = method;
....


}

// and so on

builder.toJson = function() {
    var s = JSON.stringify(this.meta);
    console.log(s);
}

但它不起作用。现在,可能是我根本不了解 builder 是如何工作的,或者它是错误的方式。任何关于错误的想法或构建器设计模式的额外解释将不胜感激。

非常感谢。

【问题讨论】:

  • 您能否具体说明,“不起作用”是什么意思?什么是预期结果,什么是实际结果?
  • @kirilloid function builder.toJson = function() { var s = JSON.stringify(this.meta);控制台.log(s); } 不打印上面代码的结果。在调试模式下,它甚至不会进入其中。预期的结果是这样的: ["!category"] = "namespace" ["!description"] = "" etc

标签: javascript xml json node.js design-patterns


【解决方案1】:

Builder 通常意味着递归。我不完全明白你需要什么,但似乎你需要创建一个属性名称白名单,然后递归地将属性复制到新对象中,然后将其序列化为 JSON。

【讨论】:

  • 是的,像这样。我会试试的,谢谢。我基本上需要使用 JS 方法从 XML 文件创建一个具有相同方法的 JSON 文件,因此 linter 可以使用后者来显示提示。
  • 非常感谢,您的建议有所帮助。我继续完成这项任务。
猜你喜欢
  • 2011-02-19
  • 2013-12-12
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多