简体   繁体   English

如何使用ExtJs将javascript数据对象(或模型)转换(或序列化)为xml

[英]How to convert (or serialize) javascript data object (or model) to xml using ExtJs

  1. How do I convert that instance to XML? 如何将该实例转换为XML?

I am working with ExtJs 4.2. 我正在使用ExtJs 4.2。 I have an instance of an ExtJs model. 我有一个ExtJs模型的实例。

  1. How do I convert that to XML? 如何将其转换为XML?

I have an anonymous JavaScript object (with a couple of properties). 我有一个匿名的JavaScript对象(有几个属性)。

I am not sure if the answers for both of the above is same. 我不确定上述两者的答案是否相同。 The XML will be sent as body to a POST operation against a third party web service. XML将作为主体发送到针对第三方Web服务的POST操作。

Converting JSON to XML in JavaScript is blasphemy! 在JavaScript中将JSON转换为XML是亵渎神明!

But if I had to do it I would use: http://code.google.com/p/x2js/ 但如果我必须这样做,我会使用: http//code.google.com/p/x2js/

I haven't used this myself, but it seems like a good solution for anyone doing for a front-/back-end agnostic approach. 我自己并没有使用它,但对于那些做前端/后端不可知方法的人来说,这似乎是一个很好的解决方案。

https://github.com/michaelkourlas/node-js2xmlparser https://github.com/michaelkourlas/node-js2xmlparser

I wrote the following function to do this job. 我写了以下函数来完成这项工作。 Works pretty well when collections (arrays) inside your object are named with "s" suffix (as plurals for their content). 当对象内的集合(数组)以“s”后缀命名(作为其内容的复数)时,可以很好地工作。

function serializeNestedNodeXML(xmlDoc, parentNode, newNodeName, obj) {
    if (Array.isArray(obj)) {
        var xmlArrayNode = xmlDoc.createElement(newNodeName);
        parentNode.appendChild(xmlArrayNode);
        obj.forEach(function (e) {
            serializeNestedNodeXML(xmlDoc, xmlArrayNode, newNodeName.substring(0, newNodeName.length - 1), e)
        });
        return;     // Do not process array properties
    } else if (obj) {
        var objType = typeof obj;
        switch (objType) {
            case 'string': case 'number': case 'boolean':
                parentNode.setAttribute(newNodeName, obj)
                break;
            case 'object':
                var xmlProp = xmlDoc.createElement(newNodeName);
                parentNode.appendChild(xmlProp);
                for (var prop in obj) {
                    serializeNestedNodeXML(xmlDoc, xmlProp, prop, obj[prop]);
                }
                break;
        }
    }
}

And I invoked it this way (as a function of the serialized class itself): 我以这种方式调用它(作为序列化类本身的函数):

this.serializeToXML = function () {
    var xmlDoc = document.implementation.createDocument(null, "YourXMLRootNodeName", null);
    serializeNestedNodeXML(xmlDoc, xmlDoc.documentElement, 'YourSerializedClassName', this);
    var serializer = new XMLSerializer();
    return serializer.serializeToString(xmlDoc);
}

But an hour later I moved to JSON... 但是一个小时后我搬到了JSON ......

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM