js怎么获取xml里某个节点的值并输出

JavaScript020

js怎么获取xml里某个节点的值并输出,第1张

1、用 childNodes 属性,按顺序取

实现过程:首先创建一个 xml 对象,然后载入 xml 文件,再根据待取节点父节点在 xml 文件中的序号和本身的序号,确定待取节点的位置,最后返回待取节点的值。

//pId 待取节点父节点序号

//cId 待取节点序号

function getXmlNodeValue(pId, cId) {

    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")

    xmlDoc.async = false

xmlDoc.load("employeeInfo.xml")

var nodes = xmlDoc.documentElement.childNodes[pId].childNodes[cId]return nodes.childNodes[0].text

}

调用方法:alert(getXmlNodeValue(1, 2))

2、用 for 循环来取

实现过程:首先创建一个 ie 支持的 xml 对象,如果发生异常,是创建一个 FireFox 支持的空 xml 对象并返回空;然后载入 xml 文件,如要发生异常也返回空;最后,通过 for 循环遍历查找与传入的节点值相同的节点,找到后返回属于该节点的属性值。

//nodeValue 待取节点的所属节点值

function getXmlNodeValueFor(nodeValue){    

    var xmlDoc 

  try { 

    //创建一个 ie 支持的 XML 文档对象 

    xmlDoc = new ActiveXObject("Microsoft.XMLDOM")

  }catch(e){

      try{

      //创建FireFox空的XML文档对象

      xmlDoc=document.implementation.createDocument("","",null)

}catch(e){

  alert(e.message)

  return ""

}

}

xmlDoc.async = false

try { 

    xmlDoc.load("employeeInfo.xml")

}catch(e){

    alert(e.message)

    return ""

}

var xd=xmlDoc.documentElement.childNodes

if(xd==null) 

    return ""

 var tempValue

for(var i=0i<xd.lengthi++){

    if(xd[i].childNodes[0].childNodes[0].nodeValue==nodeValue)        tempValue=xd[i].childNodes[2].childNodes[0].nodeValue

}

return tempValue

}

调用方法:alert(getXmlNodeValueFor("王佳琳"))

两种方法:

比如有个文本节点:<div id="test"><strong>this is value</strong></div>

1、通过document对象获取:

var obj=document.getElementById("test")

//非Mozilla浏览器:

obj.innerText

2、其他的浏览器

obj.firstChild.nodeValue

在实际项目中,遇到一个问题,首先弹出一个新窗口,新窗口中放了一个TreeView控件,TreeView控件的数据绑定在我的上一篇随笔(TreeView绑定XML数据源C#代码示例)中有讲到,现在要解决的是,如何单击TreeView中一个节点,返回Text和Value到父页面并关闭该新窗口。

首先,在后台代码中为TreeView添加属性onclick以支持TreeView的客户端事件,代码如下:

复制代码

代码如下:

if

(!IsPostBack)

{

TreeView1.Attributes.Add("onclick",

"ReturnValue()")//ReturnValue为javascript函数

BindTreeView()

}

那现在就要解决如何通过js获得TreeView中被选中的那个节点,脚本如下:

复制代码

代码如下:

function

ReturnValue()

{

var

objNode

=

event.srcElement

var

unitid

=

event.srcElement.href

if

(objNode.tagName

!=

"SPAN")

{

return

}

window.opener.document.getElementById("txtUnit").value

=

objNode.getAttribute("innerHtml")

window.opener.document.getElementById("txtUnitID").value

=

unitid

window.close()

}

其实这里用了点小花招,因为我实在不知道在哪个属性里能获得绑定给TreeView的ValueField的值,所以,Value值我一并绑给了NavigateUrl,也就是写黄色部分代码的原因,Html代码如下:

复制代码

代码如下:

<asp:TreeView

ID="TreeView1"

runat="server"

ExpandDepth="1">

<DataBindings>

<asp:TreeNodeBinding

TextField="NAME"

ValueField="Value"

NavigateUrlField="Value"

SelectAction="None"

/>

</DataBindings>

</asp:TreeView>

红色部分代码是用来获取TreeView上显示文字的,因为如果你去查看源文件的话,你会发现,TreeView的Text属性值被放在了SPAN中。

绿色部分代码是用来回填父页面的,但是要注意的是,"txtUnit"必须是客户端控件,因为如果是服务器端控件,弹窗在编译时会报不存在该控件。

这样,我需要的功能就实现了!另外,有人可能会说,父页面中用来装载回填值的是客户端控件,那如果要在服务器事件中使用怎么办?也很简单,C#代码如下:

Request.Form["txtUnit"].ToString()

但是要注意了,这里的"txtUnit"可不是控件ID,而是name属性了!