NodeJs CMS - 在构建CMS时将XML或JSON作为存储格式

时间:2012-08-13 20:59:34

标签: xml json node.js content-management-system

我正在使用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 个答案:

答案 0 :(得分:2)

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

  1. 您从表示(根)节点
  2. 的数组开始
  3. 此数组中的第一项是表示节点名称
  4. 的字符串
  5. 下一项(如果是对象)是节点上所有属性的枚举
  6. 数组的其余部分表示节点的子节点(如果有)。这里的每个项目可以是字符串(对于textnode)或另一个遵循相同规则的数组(对于elementnode)
  7. 这是JSONML的一个例子:

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

    转换为以下XML:

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

    JSONML没有提供处理指令的表示法。在JSONML之上编写自定义规则并不是很难。在我工作的组织中,我们解释以&#34;?&#34;开头的每个节点(规则2)。作为处理指令。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

JSON绝对是一个更多的节点本地&#34;存储格式。正如你所注意到的,它也适用于mongo(沙发,riak)。将数据存储为JSON而不是(字符串化)XML的另一个优点是,您可以随时在mongoDB中开始索引和查询属性。

如果您很好地整理了自己的应用,那么使用toJSON()方法替换toXML()页面序列化程序非常简单,反之亦然。你的决定并不是一成不变的,但由于它似乎适合你,而且它是节点方式,我会坚持使用JSON。

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

答案 3 :(得分:0)

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

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

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