javaScript 解析xml 内容.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaScript 解析xml 内容.相关的知识,希望对你有一定的参考价值。

xml 内容是从服务器传过来的。格式:<user><name>zs</name><pwd>123</pwd></user>
页面中可以接收到此内容,不知道怎么加载到xmlDoc 中。
var xmlResult=xhr.responseText;
alert(xmlResult);
if(window.ActiveXObject)
xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
xmlDoc.async = false;
xmlDoc.load(xmlResult);
else if (document.implementation&&document.implementation.createDocument)
xmlDoc = document.implementation.createDocument('', '', null);
xmlDoc.load(xmlResult);

var xml = xmlDoc.documentElement;
var xmlTalbe = xml.getElementsByTagName("user");
for(var i=0;i<xmlTalbe.length;i++)
document.getElementById("msg").innerhtml=xmlTalbe[i].getElementsByTagName("name")[0].childNodes[0].nodeValue +"  密码:"+ xmlTalbe[i].getElementsByTagName("pwd")[0].childNodes[0].nodeValue;


报没有load 方法。还试过loadXml loadXmlString ,都报没有这些方法。

参考技术A 注意浏览器兼容性。追问

恩。在创建一个xmlDoc 是方法不同。其他的 还有区别吗。

追答

创建的方法不同,返回的对象就会有差异,对象所拥有的属性也可能哟差异。

到w3school查文档才是王道。

参考技术B xhr.responseXml 直接得到 document 对象,假如它是XML格式的话追问

服务器 可以使用String xmlString="zs123"; 这样的格式。
resp.getWriter().print(xmlString); 把这个输出。这就是xml 格式了吧。

如果 xhr.responseXml 接收的话。得到的只是null
xhr.responseText 可以接收到如上的内容 。
是服务器输出有问题,还是接收有问题 。

追答

你输出有问题
输出的编码必须是utf-8
然后 conent-type要为 "text/xml"

追问

按你上边的提示。加上了conent-type="text/xml" 。合用
var xmlDoc=xhr.responseXML;
var xml = xmlDoc.documentElement;
这时xmlDoc 为空。得不到内容。

追答

你可以在火狐浏览器里面,打开你的测试网址,然后在页面上右键-查看页面信息
看看是不是 text/xml
text/xml是要在你的服务器输出那里设置输出内容类型的,
默认是 text/html
而 text/html 是不会解析为 responseXML的

追问

使用responseXML 获取不到信息。
服务器 可以使用String xmlString="zs123"; 这样的格式。
resp.getWriter().print(xmlString); 把这个输出。这就是xml 格式了吧。

这样输出的。
=xhr.responseText;这样可以得到上边服务器发送过来的数据。

追答

那只是输出文本内容,并不是XML格式,只是你人为的以为它是,实际电脑不知道的

追问

我在输出的时候设置了输出格式:resp.setContentType("text/xml");
在接收的时候,xhr.responseXML 。还是为null.
调试 查看xhr 中的数据。responseXML 是null .
而responseText 则有值。
就不知道怎么解析了。得不到xmlDoc 。

追答

确定是 responseXML 而不是 responseXml
<?xml version=\"1.0\" conent-type=\"text/xml\"
这里不需要 content-type 的

追问

恩。可以了。需要把那个去掉。一直是大写的。
var xmlDoc =xhr.responseXML;
var xmlTalbe = xmlDoc.getElementsByTagName("user");
这样就能取到值了。谢谢了。

追答

所以javascript这种不存在就返回 undefined / null 的作法,会害死不少人

本回答被提问者采纳
参考技术C 为什么不把你的xhr.responseText换成xhr.responseXML呢?这样不是直接就能得到XMLDOM了么追问

我试着换成xhr.responseXML 但获取不到服务器返回的内容。
服务器是使用resp.getWriter().print(xmlString);

JavaScript Ajax解析XML数据

function basicAJAX(file) {//pass a variable into the function
	var request = getHTTPObject();
	if(request){
		request.onreadystatechange = function() {
			parseResponse(request);
		};
		request.open(&quot;GET&quot;, file, true);//this is where the var is picked up, the location
		request.send(null);
	}
}
function parseResponse(request) {
	if(request.readyState == 4){//waits for the complete before execute.
		if(request.status == 200 || request.status == 304){
			var data = request.responseXML;//!Important &lt;-----------------
			createInfo(data);
		} else {
			alert(&quot;Something Broke!&quot;);
		}
	}
}
function createInfo(data) {
	var holder = document.getElementById(&quot;showDiv&quot;);//the holder div
	
	while(holder.hasChildNodes()){
		holder.removeChild(holder.lastChild);
	}
	//grab the info
	var personName = data.getElementsByTagName(&quot;name&quot;);//!Important &lt;-----------------
	var personPosition = data.getElementsByTagName(&quot;position&quot;);//!Important &lt;-----------------
	var personEmail = data.getElementsByTagName(&quot;email&quot;);//!Important &lt;-----------------
	
	var theUL = document.createElement(&quot;ul&quot;);
	//name
	var nameLI = document.createElement(&quot;li&quot;);
	var nameLIText = document.createTextNode(personName[0].firstChild.nodeValue);
	nameLI.appendChild(nameLIText);
	theUL.appendChild(nameLI);
	//position
	var positionLI = document.createElement(&quot;li&quot;);
	var positionLIText = document.createTextNode(personPosition[0].firstChild.nodeValue);
	positionLI.appendChild(positionLIText);
	theUL.appendChild(positionLI);
	//email
	var emailLI = document.createElement(&quot;li&quot;);
	var emailLIText = document.createTextNode(personEmail[0].firstChild.nodeValue);
	emailLI.appendChild(emailLIText);
	theUL.appendChild(emailLI);
	
	holder.appendChild(theUL);
}

以上是关于javaScript 解析xml 内容.的主要内容,如果未能解决你的问题,请参考以下文章

用于 Java 的 HTML/XML 解析器 [关闭]

Java 解析 XML 文档给出“Prolog 中不允许的内容”。错误[重复]

Java文件解析xml文件转成 map

从 XML 文件 (Java) 中的特定标签解析内容

在javaXML dom解析的时候 输出错误 前言中不许有内容 这个问题是哪里的错误?

JavaScripts学习日记——DOM SAX JAXP DEMO4J XPath