具有命名空间的XML的跨浏览器Javascript解析器

时间:2010-09-06 13:58:08

标签: javascript xml cross-browser xml-parsing

此主题之前已被触及,但自上一个关于命名空间处理的问题以来已经有一段时间了。

是否有跨浏览器解决方案在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文档之前使用正则表达式去除命名空间
  • 没有使用命名空间 - 我有这个选项,但不想去那条路线

2 个答案:

答案 0 :(得分:1)

您可以尝试使用另一种方法,将XML转换为JSON服务器端,使用类似http://code.google.com/p/xml2json-xslt/的通用XSLT,并仅向浏览器提供JSON。

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

除了IE之外,凭借其令人印象深刻的msxml,我认为在普通浏览器中阅读XML与JSON相比真的很痛苦。

答案 1 :(得分:0)

使用像jQuery或Prototype这样的JS框架来实现这种ajax脚本会有所帮助。 您还可以执行(示例)$("user[name=foo]"),它将选择名称为= foo的所有用户标记。 这是许多用户设法通过名称处理元素选择的解决方案。并且$("tag[name=foo]")是crossbrowser。