Javascript中的XML DOM与对象

时间:2011-02-16 17:22:36

标签: javascript dom object

我最近编写了一些带有XML DOM对象并在Javascript中返回对象的代码。在与同事交谈之后,我质疑这是否值得一试。

您是否知道有任何研究或文章讨论使用这两种方法的利弊?

示例: 我的代码将采用具有这样结构的XML DOM对象(由于NDA而更改了代码):

<myObject id="123" anotherAttr="hello" customAttr="foo">
  <myChild name="child1" foo="bar"/>
  <myChild name="child2" foo="bar"/>
  <myChild name="child3" foo="bar"/>
</myObject>

并将返回此信息:

{
  id: "123",
  anotherAttr: "hello",
  customAttr: "foo",
  children: [
    {name: "child1", foo: "bar"},
    {name: "child2", foo: "bar"},
    {name: "child3", foo: "bar"}
  ]
}

我会这样做的三个主要原因:

  1. 代码更具可读性。 (对象我可以用点表示法访问值)
  2. 我一直认为使用对象比使用DOM更快。
  3. 我的问题再一次是: 您是否知道任何研究或文章讨论使用这两种方法的利弊?我是否会根据我的假设做出决定?

2 个答案:

答案 0 :(得分:2)

在我看来,使用JavaScript版本要好得多,因为Xml版本不是标准HTML。虽然浏览器是宽容的,并且可能允许你拥有一个“xml数据岛”(MSXML3),但我坚持使用JavaScript对象。

此外,即使它是一个“DOM”元素,它还没有完全解析...你仍然必须使用DOM解析器来检测和解析XML,然后才能按照Mozila XML Data Island doc实际使用它

答案 1 :(得分:2)

以下是我的看法...

<强>优点:

1)对于未来的程序员来说,代码将更具可读性

var name = xml.selectSingleNode("myObject/myChild")[4].getAttribute("name");
//vs
var name = myObject.children[4].name

2)你获得智能感知(假设你正在使用一个支持jll的intellisense的IDE)

3)你能够完全定义xml中可用和不可用的内容(它可能包含一堆你不想永远保留的垃圾)

4)如果您将不得不修改值并进行操作,则必须承担一次通过xml的开销。不妨只做一次。

<强>缺点

1)创建新对象会产生开销。根据XML的大小,这可能会有所不同,也可能不会很小,如果你打算点击你解析的每个元素/属性。

2)Occam的Razor(最简单的解决方案就是以你得到的格式使用数据,而不是添加更多逻辑来解析它)。

3)可维护性。这假设您控制返回的XML结构。如果这样做,则必须同时维护XML的创建并确保更新JSON以匹配。 (如果写得好,可以最小化)。

备注

如果我要在自己的时间写一些东西,我会使用JSON,因为我不喜欢在javascript中处理XML并且将其解析为JSON,可以让我最小化我的代码中出现XML的位置。在任何一种方式上都有一些好处,所以它实际上归结为对你(或你的主管)必须做出的性能与可读性的判断。