日期:2014-05-16  浏览次数:20697 次

js解析XML问题,求高手指点。。。
问题描述:现在有一个从后台返回的XML被赋值在xmlReturnDoc这个变量中,我想用js对其进行解析,让里面的内容单个的显示出来!
var showXML = xmlReturnDoc.xml;
  var ShowValues = showXML .getElementsByTagName("USERSINFO").chileNodes[0].nodeValue;//USERSINFO节点名称
  alert(ShowValues);
用上面的方法提示对象不支持!求高手指点啊!

------解决方案--------------------
XML结构呢?

注意不要使用childNodes属性在firefox下,要不空白节点也算在childNodes里面的,改成getElementsByTagName来获取,并且getElementsByTagName获取到的是节点数组,要[]获取节点后才能childNodes操作,

得到xml的dom后不需要获取.xml了,是childNodes,不是chileNodes
JScript code

var showXML = xmlReturnDoc///////.xml;
//var ShowValues = showXML.getElementsByTagName("USERSINFO").chileNodes[0].nodeValue;//USERSINFO节点名称
  var ShowValues = showXML.getElementsByTagName("USERSINFO")[0].childNodes[0].nodeValue;//USERSINFO节点名称
alert(ShowValues);

------解决方案--------------------
FF中的XMLDocument对象没有xml属性.node.xml这个是IE特有的...
你需要创建一个XMLSerializer对象
var oSeria = new XMLSerializer();
oSeria.serializeToString(oNode , "text/xml"); 
这样才能返回你要的节点值。这之前你还需要判断浏览器类型,最好将这个方法封装为一个函数 定义在文档的Node类里面,很是麻烦 =.=
如果你想弄的明白,请参考<<javascript高级编程>>第十五章 Javascript中的xml第一节的第二小节。那里有完整的代码,包括兼容两种类型的浏览器(IE/DOM)。
------解决方案--------------------
你最好在后台将xmlReturnDoc放到请求中
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat().setEncoding("ISO8859-1"));
outputter.output(xmlReturnDoc,response.getWriter());
前台var doc = xmlHttpRequest.responseXML;就能获取到了
------解决方案--------------------
节点的操作,在浏览器之间是有差异性的

而且,#1楼的说的getElementsByTagName这个和getElementsByName两个得到的都是对象集合,使用时都是需要指定索引的。
------解决方案--------------------
1楼说得对, 浏览器不同,解析的方法有时候就不一样的。
------解决方案--------------------
话说,getElementsByName标签是不支持获取div,p,h标签的,这个在ie下试过,其他浏览器貌似也有这个问题~~~