核心要点
在之前的文章《如何用 PHP 创建 XML 到 JSON 代理服务器》中,我们创建了一个系统,将 XML 消息转换为 Ajax 可用的 JSON。如果您运行 PHP 或其他合适的服务器端进程,这非常棒。但是,如果您仅限于 JavaScript 呢?随机访问 XML 文档中的数据并不有趣。您可以使用 DOM 或 XPath 方法,但它们不如原生(JSON 生成的)JavaScript 对象属性(例如 myobj.list[0].property1)那样容易。如果您经常访问同一个 XML 文档中的数据,则首先将其转换为 JavaScript 对象可能比较实用。准备编写一些代码了吗?……
XML2jsobj 函数
我们将编写一个函数,递归分析 XML 文档 DOM 树的每个节点并返回一个 JavaScript 对象。该函数传递一个起始节点(通常是根 documentElement),并返回一个对象(内部命名为 data):
function XML2jsobj(node) { var data = {}; // 添加值 function Add(name, value) { if (data[name]) { if (data[name].constructor != Array) { data[name] = [data[name]]; } data[name][data[name].length] = value; } else { data[name] = value; } }; // 元素属性 var c, cn; for (c = 0; cn = node.attributes[c]; c++) { Add(cn.name, cn.value); } // 子元素 for (c = 0; cn = node.childNodes[c]; c++) { if (cn.nodeType == 1) { if (cn.childNodes.length == 1 && cn.firstChild.nodeType == 3) { // 文本值 Add(cn.nodeName, cn.firstChild.nodeValue); } else { // 子对象 Add(cn.nodeName, XML2jsobj(cn)); } } } return data; }
XML 转换
我们的 Ajax 调用可以从 Web 服务检索 XML:
// 示例 XML 提要 var url = "example.xml"; // AJAX 请求 var xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP")); xhr.onreadystatechange = XHRhandler; xhr.open("GET", url, true); xhr.send(null);
我们的 XMLHttpRequest onreadystatechange 处理程序接收 XML 数据并将其转换为 JavaScript 对象:
// 处理响应 function XHRhandler() { if (xhr.readyState == 4) { var obj = XML2jsobj(xhr.responseXML.documentElement); // 对返回的数据执行某些操作... console.log(obj); xhr = null; } }
因此,如果 example.xml 返回以下 XML 数据:
<?xml version="1.0"?><statuses><status><id>1</id><text>Hello!</text></status></statuses>
XML2jsobj(xhr.responseXML.documentElement) 将返回以下对象:
{ status: { id: ["one", 1], text: "Hello!" } }
因此,您可以使用 obj.status.text 检索“Hello!”文本。
注意事项
关于 XML2jsobj 的一些说明:
您可以查看演示页面或下载代码和示例以用于您自己的项目。我希望您觉得它有用——如果您发现它减轻了一些 XML 难题,请告诉我!
关于将 XML 转换为 JavaScript 对象的常见问题解答 (此部分已在原文基础上进行了精简和调整,避免重复)
这部分内容与原文重复,已省略。 原文中常见问题解答部分内容冗余且与代码示例关联性不强,因此在伪原创过程中进行了精简。
以上是如何将XML转换为类似JSON的JavaScript对象的详细内容。更多信息请关注PHP中文网其他相关文章!