【问题标题】:Cross-Browser Javascript Parser for XML with Namespace具有命名空间的 XML 跨浏览器 Javascript 解析器
【发布时间】:2010-09-06 13:58:07
【问题描述】:

这个主题之前已经提到过,但是距离上一个关于命名空间处理的问题已经有一段时间了。

是否有跨浏览器的解决方案可以在 Javascript 中按名称获取元素?

<?xml version="1.0" encoding="UTF-8"?>
<NS:response success="1" xmlns:NS="http://someURI/ns">
   <NS:user firstname="foo" lastname="bar"></NS:user>
   <NS:cookie value="2c0ea35bcac2e05d439609367a236b28" name="session"></NS:cookie>
</NS:response>

到目前为止我得到了什么:

var oXML = (new DOMParser()).parseFromString(xmlstring, "text/xml");
var root = oXML.documentElement;
var user = typeof(user=root.getElementsByTagName(root.prefix + ':user')[0]) === "undefined"
              ?root.getElementsByTagName('user')[0]
              :user;

尚未在 IE 中测试,但如果有人有任何跨浏览器的解决方案,我很乐意听到。

其他注意事项:

  • getElementsByTagNameNS() - 我试图避免指定命名空间/uri
  • 在创建 XML 文档之前使用正则表达式去除命名空间
  • 不使用命名空间 - 我有这个选项,但不想走那条路

【问题讨论】:

  • DOMParser() 在 IE 中肯定行不通,你必须去ActiveX/MSXML route
  • +1。我记得,但这不是问题,围绕它编写代码很容易;如果object.documentElement 不是跨浏览器,那就更划算了:)

标签: javascript xml cross-browser xml-parsing


【解决方案1】:

您可以尝试另一种方法,通过将 XML 转换为 JSON 服务器端,使用像 http://code.google.com/p/xml2json-xslt/ 这样的通用 XSLT,并仅将 JSON 传递给浏览器。

这会在服务器响应上增加一点开销,但与在浏览器上渲染 XML 所花费的代码量和时间相比,这没什么。

除了 IE,它的 msxml 令人印象深刻,我认为与 JSON 相比,在普通浏览器中读取 XML 是一个真正的痛苦。

【讨论】:

  • 我实际上是在创建 XML 服务器端,所以我猜我会从 JSON 开始,而不是需要转换它。我将 XML 用作某些 Web 身份验证的一部分。由于我可以控制输入,我可以轻松地返回带分隔符的 ASCII 不带任何标记,但我确实有一段时间不需要使用 XML Dom,所以这是一个新项目:)
  • 我从事基于 XML/XSLT 的 Web 应用程序已有 10 多年了。当我搬到 JSON 时,这是一种解放,我不会白白回来。 ASCII 消息传递并不理想,因为它通常会在您更改消息时破坏您的代码,而 XML 和 JSON,只要您添加内容,旧代码就会继续按预期工作。
【解决方案2】:

对这种 ajax 脚本使用 jQuery 或 Prototype 等 JS 框架会有所帮助。 您也可以执行(示例)$("user[name=foo]"),这将选择所有带有 name=foo 的用户标签。 这是许多用户设法通过名称处理元素选择的解决方案。而$("tag[name=foo]") 是跨浏览器。

【讨论】:

    猜你喜欢
    • 2011-12-18
    • 2013-07-03
    • 2011-05-07
    • 2015-02-07
    • 2021-10-24
    • 2016-07-08
    • 1970-01-01
    • 2014-06-14
    相关资源
    最近更新 更多