在Javascript中的循环中创建一个(xml)字符串
Creating a (xml) string in a loop in Javascript
我是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对象(因为它看起来像是一个足够复杂的对象)。
相关文章:
- Javascript:一个二维数组的字符串
- Javascript:一个变量包含值,但Firebug说它是空的
- 使用 JavaScript 一个接一个地播放几个音频
- Javascript 一个请求多个 JS 文件
- JavaScript:一个又一个循环不执行
- 动态加载头标签中的Javascript一个接一个完全加载后不追加,跨域
- Javascript:一个项目数组的sum-all-found.data()
- Javascript:一个带键的数组怎么可能呢
- JavaScript:一个变量可以有多个值吗
- Javascript-一个变量能在多大程度上保持其价值
- Javascript一个站点上有两个计算器
- JavaScript:一个接一个执行多个REST调用的正确方法
- JavaScript.一个奇怪的分配句子
- Javascript -一个函数中的多个任务无法工作
- javax.script传递给javascript一个Java方法作为回调
- Javascript -一个未知的JSON对象返回给我,我如何看待它
- JavaScript:一个字节应该是8位
- 当用户“看到”时激活JavaScript.一个元素
- Javascript一个输入字段连接到几个函数
- Javascript:一个IIFE函数以及供以后使用的函数定义