在Javascript中的循环中创建一个(xml)字符串

Creating a (xml) string in a loop in Javascript

本文关键字:Javascript 一个 xml 字符串 循环 创建      更新时间:2023-09-26

我是Javascript的新手。我有一个多维数组,我想解析它,并转储xml标记。例如,阵列是类型

arr["fname1"][2] = param1 ; 

我想转储像-这样的xml标签

<fname>fname1</fname>

完成后,我的最终目标是使用jQuery.ajax()发送这个xml标签字符串,就像这个一样

var xmlDocument = [create xml document];
$.ajax({
url: "page.php",
processData: false,
data: xmlDocument,
success: handleResponse
});

我该怎么做?请提供建议。谢谢

根据二维数组的复杂性,最简单的方法是循环并附加到字符串中。例如

function createXMLDocument(arr){
  var xmlDocument = "<myxmldoc>'n"
  for (node in arr) {
    var xmlNode = "'t<fname ";
    for (var i = 0; i < arr[node].length; i++){
      xmlNode += " attr" + i + "='"" + arr[node][i] + "'" ";
    }
    xmlNode += ">" + node + "</fname>";
    xmlDocument += "'n" + xmlNode;
  }
  return xmlDocument + "'n</myxmldoc>";
}

这会给你一些类似的东西

<myxmldoc>
  <fname attr0="param1" attr1="param2" ...>fname1</fname>
  <fname attr0="param1" attr1="param2" ...>fname2</fname>
  ...
</myxmldoc>

如果您的数组应该生成一个更复杂的xml文档/结构,您可能希望采用以下方法:

http://oreilly.com/pub/h/2127

希望这能有所帮助。

您可以这样做:

var xmlData = $('<data></data>');

然后,您可以使用jquery方法append:附加任何您喜欢的数据(您想要发送的数据)

xmlData.append("<myParentTag></myParentTag>");

还有其他属性可以处理数据。您还可以使用jquery选择器来选择特定的标记,并操作其内容。然后,你可以发送这样的数据:

$.post(
    "/my_url/", 
    xmlData.html(), 
    function(msg) {/* On success perform actions */;}
);

要在服务器端获取数据,您必须找到一种获取原始post字符串的方法,而不是使用类似字典的结构。使用Django,您可以做到这一点。

我在一个应用程序中使用了这种方法,效果很好。

有了给定的信息,您可以执行以下操作(尽管我更喜欢按原样发送数据(JSON))。它是Colins解决方案的"优化"版本(只有一个循环,较少的字符串串联)

var arr = {
        "fname1": [1, 2, 3, 4], 
        "fname2": [1, 2, 3, 4],
        "fname3": [1, 2, 3, 4],
        "fname4": [1, 2, 3, 4]
    },
    xml = [],
    tag = null;

for (tag in arr) {
    if (arr.hasOwnProperty(tag) == false) {
        xml.push("<fname>" + tag + "</fname>");
        xml.push("<params><param>" + obj[tag].join("</param><param>") + "/param></params>");
    }
}
console.log(xml.join(""))

我想我以后可能需要这个,所以为了回答你的问题,我构建了一个jQuery插件,可以接受任何任意的JavaScript对象和你想给根节点的名称,并向你返回一个表示对象的XML字符串。插件在线评论:

(function($) {
    $.extend({
        /// <summary>
        /// Build an XML structure from an object.
        /// </summary>
        /// <param name="obj">The object to transform to an XML structure.</param>
        /// <param name="objName">The name of the XML node type.</param>
        /// <param name="parentObj">(optional) The parent node of the XML structure.</param>
        /// <returns>XML structure representing the object.</returns>
        toXml: function(obj, objName, parentObj) {
            // Use the supplied parent object or dimension a new root object
            var $parent = parentObj ? parentObj : $("<" + objName + "></" + objName + ">");
            // Determine if the object members do not have names
            var blank = obj instanceof Array ? "<item></item>" : null;
            // For each member of the object
            $.each(obj, function(i, val) {
                // Declare the next object with the appropriate naming convention
                var $next = $(blank ? blank : "<" + i + "></" + i + ">");
                // Add an index attribute to unnamed array members
                if (blank) $next.attr("index", i);
                if (typeof val === "object") {
                    // Recurse for object members
                    $next = $.toXml(val, i, $next);
                } else {
                    // Otherwise set the text for leaf nodes
                    $next.text(val);
                }
                // Append this child node
                $parent.append($next);
            });
            // Return the parent object with newly appended child nodes
            return $parent;
        },
        /// <summary>
        /// Build an XML string from an object.
        /// </summary>
        /// <param name="obj">The object to transform to an XML string.</param>
        /// <param name="rootName">The name of the root XML node type.</param>
        /// <returns>XML string representing the object.</returns>
        toXmlString: function(obj, rootName) {
            // Shell the XML object into a container and return its inner html
            return $("<container></container>").append($.toXml(obj, rootName)).html();
        }
    });
})(jQuery);

用法

$.toXmlString(myObj, "myObjName");

请参阅这里的一个工作示例,该示例使用谷歌地图中的示例JSON GeocodeResponse对象(因为它看起来像是一个足够复杂的对象)。