Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有名称空间的XML跨浏览器Javascript解析器_Javascript_Xml_Cross Browser_Xml Parsing - Fatal编程技术网

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

具有名称空间的XML跨浏览器Javascript解析器,javascript,xml,cross-browser,xml-parsing,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>

这个主题以前已经讨论过了,但是自从上一个关于名称空间处理的问题提出以来已经有一段时间了

有没有跨浏览器的解决方案可以在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>
还没有在IE上测试过,但如果有人有跨浏览器的解决方案,我愿意听听

其他注意事项:

  • GetElementsByTagnames()-我试图避免必须指定名称空间/uri
  • 在创建XML文档之前使用regex剥离名称空间
  • 不使用名称空间-我有这个选项,但不想走这条路

为此类ajax脚本使用jQuery或Prototype等JS框架会有所帮助。 您还可以执行(示例)
$(“user[name=foo]”
,选择name=foo的所有用户标记。
这是一个解决方案,许多用户通过名称处理元素选择。而
$(“tag[name=foo]”)则是交叉浏览器。

为这种ajax脚本使用jQuery或Prototype之类的JS框架会有所帮助。 您还可以执行(示例)
$(“user[name=foo]”
,选择name=foo的所有用户标记。
这是一个解决方案,许多用户通过名称处理元素选择。而
$(“tag[name=foo]”)则是交叉浏览器。

您可以尝试另一种方法,使用类似XSLT的通用XSLT将XML转换为JSON服务器端,并仅向浏览器交付JSON

这将在服务器响应上增加一点开销,但与在浏览器上呈现XML所花费的代码量和时间相比,这算不了什么


除了IE之外,由于其令人印象深刻的msxml,我认为在普通浏览器中读取XML与JSON相比是一件非常痛苦的事情。

您可以尝试另一种方法,使用类似XSLT的通用XSLT将XML转换为JSON服务器端,并仅向浏览器交付JSON

这将在服务器响应上增加一点开销,但与在浏览器上呈现XML所花费的代码量和时间相比,这算不了什么


除了IE之外,由于其令人印象深刻的msxml,我认为与JSON相比,在普通浏览器中读取XML是一件非常痛苦的事情。

DOMParser()在IE中肯定不起作用,您必须使用。+1。我记得,但这不是问题,很容易编写代码;如果
object.documentElement
不是跨浏览器的,那将是一个更大的问题:)DOMParser()当然不能在IE中工作,您必须使用.1。我记得,但这不是问题,很容易编写代码;如果
object.documentElement
不是跨浏览器的,那将是一个更大的问题:)我实际上是在创建XML服务器端,所以我想我应该从JSON开始,而不是需要转换它。我使用XML作为某种web身份验证的一部分。因为我可以控制输入,所以我可以轻松地返回带分隔符的ASCII,不带任何标记,但我真的有一段时间不需要使用XML Dom了,所以这是一个新项目:)我做了10多年基于XML/XSLT的web应用程序。当我搬到JSON时,这是一种解放,我不会白白回来。ASCII消息传递并不理想,因为当您更改消息时,它通常会破坏您的代码,而XML和JSON,只要您添加内容,旧代码就会继续按预期工作。我实际上正在创建XML服务器端,因此我想我应该从JSON开始,而不需要转换它。我使用XML作为某种web身份验证的一部分。因为我可以控制输入,所以我可以轻松地返回带分隔符的ASCII,不带任何标记,但我真的有一段时间不需要使用XML Dom了,所以这是一个新项目:)我做了10多年基于XML/XSLT的web应用程序。当我搬到JSON时,这是一种解放,我不会白白回来。ASCII消息传递并不理想,因为当您更改消息时,它通常会打断您的代码,而XML和JSON,只要您添加内容,旧代码就会继续按预期工作。
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;