2

我正在使用 Express 在 NodeJs 之上用 javascript 编写 CMS。我的目标是构建过去几年我每天都在 .NET 中构建的东西,但现在纯粹是在 javascript 中构建的。目前,我有基本的流程工作,内联编辑页面(使用“contenteditable”属性),然后将这些可编辑 div 的 HTML 解析为 JSON 并将其存储在 MongoDB 中。

反过来,所需部分的 JSON 被解析回 HTML 服务器端并使用 jQuery 插入到 JSDom 文档中,然后将整个文档发送到客户端。

这一切都很完美,但现在我正在与一位同事讨论,他质疑将 HTML 存储为 JSON 的部分。在他看来,这应该是 XML,但在将所有内容都更改为 XML 之前,我想听听关于这个问题的更多意见。

XML 在流程的任何部分都比 JSON 有优势吗?我将不得不使用 XSLT 将 XML 格式化为 HTML,而不是像我所知的那样将 JSON 解析回 HTML。

对此的任何意见将不胜感激。

4

4 回答 4

2

是的,JSON 适用于 Javascript 中的对象,而 XML 适用于您尝试存储的 HTML。因此,请看一下 JSONML,它是一种写下 XML 的 JSON 语法。规范真的很简单,所以简而言之。

  1. 你从一个代表(根)节点的数组开始
  2. 该数组中的第一项是表示节点名称的字符串
  3. 下一项,如果是对象,就是节点上所有属性的枚举
  4. 数组的其余部分表示节点的子节点(如果有)。这里的每个项目可以是一个字符串(对于一个文本节点)或另一个遵守相同规则的数组(对于一个元素节点)

这是 JSONML 的一个示例:

[
    "lcSequenceOption",
    [
        "lcAnswerContent",
        "Some answer content"
    ],
    [
        "lcSequence",
        {
            "value": 0
        }
    ]
]

转换为以下 XML:

<lcSequenceOption>
    <lcAnswerContent>Some answer content</lcAnswerContent>
    <lcSequence value="0" />
</lcSequenceOption>

JSONML 没有提供处理指令的符号。在 JSONML 之上编写自定义规则并不难。在我工作的组织中,我们解释每个以“?”开头的节点名(规则 2)。作为处理指令。

于 2015-11-12T14:14:22.900 回答
1

我倾向于使用像 BaseX 这样的 XML 数据库解决方案将数据存储在 XML 中,原因如下:

  • 它非常适合使用 XSLT 以符合标准的方式生成其他标记格式,例如 HTML
  • 使用符合标准的语言(如 XPath)很容易查询
  • 转换为几乎所有其他格式相对容易(例如使用 XSL:FO 的 PDF)
  • 在几乎任何编辑器中都易于阅读/理解

对我来说,将 HTML 之类的标记语言(我假设 CMS 的输入数据格式)转换为 JSON,然后在以“读取”模式呈现 CMS 页面时将 JSON 转换回 HTML 感觉很复杂。假设输入格式是有效的 XHTML,您可以将其存储和检索为本机 XML,这对我来说感觉更自然。

于 2012-08-16T11:10:00.590 回答
0

我建议您使用 JSON,它不需要太多存储空间。

最重要的是它超级快,我已经测试过在 nodejs 中解析查询字符串和 json 对象,json 比查询字符串更快。我相信它也会比 XML 更快。

我最新的开源项目ourjs.org也是基于JSON 的。它也是一个小型 CMS,很容易将数据缓存在内存中,因此 JSON 就是其中之一。

于 2014-08-04T14:17:51.400 回答
0

JSON 绝对是一种更“节点原生”的存储格式。正如您所指出的,它也可以很好地与 mongo (couch, riak) 配合使用。将数据存储为 JSON 而不是(字符串化)XML 的另一个优点是,您可以随时在 mongoDB 中开始索引和查询属性。

如果你很好地组织你的应用程序,toJSON()用方法替换你的页面序列化器是非常简单的,toXML()反之亦然。你的决定不是一成不变的,但因为它似乎对你有用并且“它是节点方式”,所以我会坚持使用 JSON。

如果有人愿意的话,我很想看到一些支持 XML 的答案。

于 2012-08-13T21:39:58.117 回答