源码贴上
接受字符串:
"<?xml version="1.0" encoding="utf-8"?>\r\n<ArrayOfStu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">\r\n <Stu>\r\n <Name>1</Name>\r\n <Num>2</Num>\r\n </Stu>\r\n <Stu>\r\n <Name>1</Name>\r\n <Num>2</Num>\r\n </Stu>\r\n</ArrayOfStu>"
JS代码:
//FF解析XML字符串器
var parser = new DOMParser();
var xml_dom = parser.parseFromString(strXML, "text/xml");
xmlDoc = document.implementation.createDocument("", "", null);
//都不用异步
xmlDoc.async = false;
xmlDoc = xml_dom; var oEvaluator = new XPathEvaluator();
//命名空间解析器
var resolver = oEvaluator.createNSResolver(xmlDoc.documentElement);
var oResult = oEvaluator.evaluate('//Name',
xmlDoc.documentElement,
resolver,
XPathResult.ORDERED_NODE_ITERATOR_TYPE,
null);
if (oResult != null) {
var oElement = oResult.iterateNext();
while (oElement) {
alert(oElement.tagName);
oElement = oResult.iterateNext();
}
}
我想可能是命名空间问题 我加上了命名空间解析器
可是oResult.iterateNext(); 为什么返回的总是NULL
我哪里错了?
接受字符串:
"<?xml version="1.0" encoding="utf-8"?>\r\n<ArrayOfStu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">\r\n <Stu>\r\n <Name>1</Name>\r\n <Num>2</Num>\r\n </Stu>\r\n <Stu>\r\n <Name>1</Name>\r\n <Num>2</Num>\r\n </Stu>\r\n</ArrayOfStu>"
JS代码:
//FF解析XML字符串器
var parser = new DOMParser();
var xml_dom = parser.parseFromString(strXML, "text/xml");
xmlDoc = document.implementation.createDocument("", "", null);
//都不用异步
xmlDoc.async = false;
xmlDoc = xml_dom; var oEvaluator = new XPathEvaluator();
//命名空间解析器
var resolver = oEvaluator.createNSResolver(xmlDoc.documentElement);
var oResult = oEvaluator.evaluate('//Name',
xmlDoc.documentElement,
resolver,
XPathResult.ORDERED_NODE_ITERATOR_TYPE,
null);
if (oResult != null) {
var oElement = oResult.iterateNext();
while (oElement) {
alert(oElement.tagName);
oElement = oResult.iterateNext();
}
}
我想可能是命名空间问题 我加上了命名空间解析器
可是oResult.iterateNext(); 为什么返回的总是NULL
我哪里错了?
解决方案 »
- 打印DOM树,为什么这里的document的hasChildNodes()返回的是false??
- canvas内为什么strokeStyle = "rgb(x,x,x)"总为黑色
- Ext 中ComboBox的设定初始值的问题
- 很简单的代码问题,路过朋友帮忙看下
- 小菜我问下,如何判断字符串以数字开头
- 还是 一个 iframe 的问题
- 关于页面加载和时延函数的问题
- 关于提交的问题
- 如何取得File框的文件路径,并添加到多行的Box里面,谢谢
- 急!急!如何通过window.close关闭主窗口,而不出提示框
- 帮忙看看这段脚本,有个不明白的地方,新手学JAVA脚本 请高手对我指指点点
- 匿名函数传递参数! 急
<?xml version="1.0" encoding="utf-8" ?>
- <ArrayOfStu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
- <Stu>
<Name>1</Name>
<Num>2</Num>
</Stu>
- <Stu>
<Name>1</Name>
<Num>2</Num>
</Stu>
</ArrayOfStu>
var parser = new DOMParser();
var xml_dom = parser.parseFromString(strXML, "text/xml");
//var xmlDoc = document.implementation.createDocument("", "", null);//都不用异步
//xmlDoc.async = false;
xmlDoc = xml_dom;var oEvaluator = new XPathEvaluator();//命名空间解析器
var resolver = oEvaluator.createNSResolver(xmlDoc.documentElement);var oResult = oEvaluator.evaluate('//Name',
xmlDoc,
resolver,
XPathResult.ANY_TYPE,
null);
if (oResult != null) {
var oElement = oResult.iterateNext();
alert(oElement);
while (oElement) {
alert(oElement.tagName);
oElement = oResult.iterateNext();
}
}虽然觉得很奇怪,但是XPath似乎无法读取默认命名空间
xmlns="http://tempuri.org/"去掉就正常了
我该使用这样
ar oResult = oEvaluator.evaluate(XPath,
strXML,
nsResolver,
XPathResult.ORDERED_NODE_ITERATOR_TYPE,
null);
if (oResult != null) {
var oElement = oResult.iterateNext();
while (oElement) {
alert(oElement.tagName);
oElement = oResult.iterateNext();
}
}
}
}function nsResolver(prefix) {
// 命名空间的名称/URI对
switch (prefix) {
case "xsi": return "http://www.w3.org/2001/XMLSchema-instance";
case "xsd": return "http://www.w3.org/2001/XMLSchema";
default: return "http://tempuri.org/";
}
} 还是无解
继续等待高手
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title><head>
<script type="text/javascript">window.onload = function() {
var strXML = '<?xml version="1.0" encoding="utf-8"?><ArrayOfStu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"><Stu><Name>1</Name><Num>2</Num></Stu><Stu><Name>1</Name><Num>2</Num></Stu></ArrayOfStu>';
var parser = new DOMParser();
var xml_dom = parser.parseFromString(strXML, "text/xml");
//var xmlDoc = document.implementation.createDocument("", "", null);
//都不用异步
//xmlDoc.async = false;
xmlDoc = xml_dom;
var oEvaluator = new XPathEvaluator(); function resolver(prefix) {
// 命名空间的名称/URI对
switch (prefix) {
case "xsi": return "http://www.w3.org/2001/XMLSchema-instance";
case "xsd": return "http://www.w3.org/2001/XMLSchema";
default: return "http://tempuri.org/";
}
}
//命名空间解析器
//var resolver = oEvaluator.createNSResolver(xmlDoc.documentElement);
var oResult = oEvaluator.evaluate('//ns:Name',
xmlDoc,
resolver,
XPathResult.ANY_TYPE,
null);
if (oResult != null) {
var oElement = oResult.iterateNext();
alert(oElement);
while (oElement) {
alert(oElement.tagName);
oElement = oResult.iterateNext();
}
}
}
</script></head>
</html>即使是默认命名空间,仍然需要定义名字。
你这里用了default,那么随便加个ns:,即可取得