论坛首页 Web前端技术论坛

JavaScript 解析 XML 时如何通过名称直接取到值?

浏览 14063 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-26  

JavaScript 解析 XML 时如何通过名称直接取到值?

xml 代码
  1. <?xml version="1.0" encoding="UTF-8" ?>    
  2. <root>  
  3.     <Attribute name="aa" value="0" />  
  4.     <Attribute name="bb" value="1" />  
  5.     <Attribute name="cc" value="2" />  
  6.     ...   
  7.     ...   
  8.     <Operation name="initAllCounter" return="boolean"/>  
  9.     ...   
  10.     ...   
  11. </root>  

同级的Attribute,有没有办法通过类似于 getXXXByName("aa") 得到0, getXXXByName("bb") 得到1呢?

而不是通过

java 代码
  1. var attributes = response.getElementsByTagName('Attribute');   
  2. for(var i = 0;i < attributes.length;i++)   
  3. {   
  4.     name = attributes[i].getAttribute("name");   
  5.     // 然后一个个判断是否是aa,   
  6.     if(name == "aa")   
  7.     {   
  8.         // 然后再 通过 attributes[i].getAttribute("value"); 取得值   
  9.         value = attributes[i].getAttribute("value");    
  10.     }   
  11.     // ...   
  12. }  

 

有何办法?我现在先if判断处理之,再看有没有好方法?
   发表时间:2007-01-26  
这样的就应该设计成
<aa>0</aa>
<bb>1</bb>
<cc>2</cc>
0 请登录后投票
   发表时间:2007-01-26  
不要去想当然好不好,如果存在这样的情况,你怎么办,大家都想有个好的处理方式这是肯定的:)

找了些XPath的内容,在研究学习中。。。

http://developer.mozilla.org/en/docs/Introduction_to_using_XPath_in_JavaScript

http://glazkov.com/archive/2004/04/06/168.aspx
0 请登录后投票
   发表时间:2007-01-29  
xpath 是不是应该这么写?
//root/Attribute[@name="aa"]


0 请登录后投票
   发表时间:2007-01-29  
这里有xpath的例子
http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html
这里有介绍
http://ivanl.iteye.com/blog/39826
0 请登录后投票
   发表时间:2007-01-29  
if IE, try:

var jsXML = new ActiveXObject("MSXML2.DOMDocument.4.0");
jsXML.async = false;
jsXML.load("my.xml");
document.getElementById("myDivId").value = jsXML.xml;
0 请登录后投票
   发表时间:2007-01-30  
这样 ?

node.selectSingleNode("//root/Attribute[@name='aa']").attributes.getNamedItem("value").nodeValue;

汗。。
0 请登录后投票
   发表时间:2007-01-31  
knight 写道
这样 ?

node.selectSingleNode("//root/Attribute[@name='aa']").attributes.getNamedItem("value").nodeValue;

汗。。

IE下可以这么写:
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <xml id="myData"> 
	<root>
		<Attribute name="aa" value="0" /> 
		<Attribute name="bb" value="1" />
		<Attribute name="cc" value="2" />
		<Operation name="initAllCounter" return="boolean"/>
	</root>
  </xml>

 </HEAD>
<script language="javascript">
	function getValueFromNode(nodeName , conditionName , attrName) {
		var node = myData.selectSingleNode("/root/" + nodeName + "[@name='"+ conditionName +"']");
		if (null == node) {
			return;
		}
		alert(node.getAttribute(attrName));
	}

	function getNodes(nodeName , attrName) {
		var nodes = myData.selectNodes("//" + nodeName);
		for (var i = 0; i < nodes.length; i++ )
		{
			alert(nodes[i].getAttribute(attrName));
		}
	}

</script>
 <BODY>
  <input type="button" value="获取nodeName=Attribute的value" onclick="getNodes('Attribute' , 'value')">
  <input type="button" value="获取name='aa'的value" onclick="getValueFromNode('Attribute' , 'aa' , 'value')">
  <input type="button" value="获取name='bb'的value" onclick="getValueFromNode('Attribute' , 'bb' , 'value')">
  <input type="button" value="获取name='cc'的value" onclick="getValueFromNode('Attribute' , 'cc' , 'value')">
  <input type="button" value="获取name='initAllCounter'的value" onclick="getValueFromNode('Operation' , 'initAllCounter' , 'return')">
 </BODY>
</HTML>

0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics