我最近编写了一些带有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"}
]
}
我会这样做的三个主要原因:
我的问题再一次是: 您是否知道任何研究或文章讨论使用这两种方法的利弊?我是否会根据我的假设做出决定?
答案 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的位置。在任何一种方式上都有一些好处,所以它实际上归结为对你(或你的主管)必须做出的性能与可读性的判断。