代码之家  ›  专栏  ›  技术社区  ›  vol7ron

带命名空间的XML跨浏览器JavaScript解析器

  •  1
  • vol7ron  · 技术社区  · 14 年前

    这个主题以前曾被提到过,但从上一个关于名称空间处理的问题开始,已经有一段时间了。

    有没有一个跨浏览器的解决方案可以在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()-am试图避免指定命名空间/uri
    • 在创建XML文档之前使用regex除去命名空间
    • 不使用名称空间-我有这个选项,但不想走那个路线
    2 回复  |  直到 14 年前
        1
  •  1
  •   Mic    14 年前

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

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

    除了IE之外,由于它令人印象深刻的MSXML,我认为在普通浏览器中阅读XML与JSON相比是一种真正的痛苦。

        2
  •  0
  •   BoDiE2003    14 年前

    对这种Ajax脚本使用jquery或原型这样的JS框架会有所帮助。 您也可以这样做(示例) $("user[name=foo]") 这将选择名称为foo的所有用户标签。 这是一个解决方案,许多用户都设法按名称处理元素选择。和 $("tag[name=foo]") 是CrossBrowser。