| 到目前为止你所看到的范例script 程序中,都是借着浏览节点的阶层结构,利用childNodes 与firstChild 两个节点属性来从某节点往相邻节点移动。记住,你可以用类似的方法来使用lastChild、previousSibling、nextSibling 和parentNode 等节点属性。表格9-2 详细描述了这些节点属性。 注意 childNodes、firstChild 与lastChild 属性只准许你存取非属性的子节点,而previousSibling 与nextSibling 属性则让你可以存取任何形态的兄弟节点。 另一种存取XML 元素的方法,是使用getElementsByTagName 方法来撷取拥有特殊形态名称的所有元素(像TITLE)。这个方法在Document 节点(于表格9-3 中介绍)以及Element 节点(于表格9-6 中介绍)都可以使用。如果你为Document 节点呼叫这个方法,它会传回文件中所有拥有特定型态名称元素的Element 节点集合。例如,下面的程序代码会取得文件中所有为BOOK 形态元素的Element 节点集合: NodeList =Document.getElementsByTagName("BOOK "); 如果呼叫Element 节点的getElementsByTagName 方法,如下面例子所示,则方法将传回所有符合条件的子Element 节点集合: NodeList =Element.getElementsByTagName("AUTHOR "); 提示 如果你传入「*」值给getElementsByTagName 方法,其将传回所有元素的节点集合。(如果你呼叫的是Document 对象的方法,则其会传回文件中所有元素的集合;如果呼叫的是Element对象的方法,则其会传回所有后继元素的集合。)
getElementsByTagName 方法以NodeList 集合对象的形态,传回给Element 节点。因此你可以使用本章先前在<使用NodeList 对象>中讨论过的任何技术,来存取个别的节点。例如,下面的script 程序,将显示(藉由「alert」的讯息显示框)由getElementsByTagName 方法所传回的NodeList 对象中所有Element 节点的文字内容: for (i=0;i <NodeList.length;++i) alert (NodeList(i).text); 列表9-5 的HTML 网页显示了在Document 节点中使用getElements-ByTagName 方法的用法。(你可以在随书光盘中的GetElements.htm 档案中找到列表9-5。)该网页显示一个文字(TEXT)形态的输入(INPUT)控件,让你可以输入元素名称。当你按下 Show Elements 按钮时,script中的ShowElements 函式将在文件节点中使用getElementsByTagName 方法来搜寻,并显示文件中符合输入元素名称的所有元素XML 卷标的内容。注意,script 中使用每个Element 节点的xml 属性来显示元素的XML 卷标内容。网页一开始就被连结至文件Inventory.xml 中,虽然你可以编辑文件中的data island来显示其它XML文件中的元素。下图是在你输入AUTHOR到INPUT 控件并按下按钮时,Internet Explorer 5 显示该网页的情况。 GetElements.htm <!--File Name:GetElements.htm --> <HTML> <HEAD> <TITLE>Element Finder</TITLE> <SCRIPT LANGUAGE="JavaScript"> function ShowElements() { /*make sure user has entered text into the 'Element name' box::*/ if (ElementName.value =="") { ResultDiv.innerText ="<You must enter an element" +"name into 'Element name' box..>"; return; } /*get a NodeList collection of all matching Element nodes in the document:*/ Document =dsoXML.XMLDocument; NodeList = Document.getElementsByTagName (ElementName.value); /*store the XML markup for each Element node in ResultHTML:*/ ResultHTML =""; for (i=0;i <NodeList.length;++i) ResultHTML +=NodeList(i).xml +"\n \n"; /*assign the stored results to the innerText property of the DIV:*/ if (ResultHTML =="") ResultDiv.innerText ="<no matching elements found>"; else ResultDiv.innerText =ResultHTML; } </SCRIPT> </HEAD> <BODY> <XML ID="dsoXML" SRC="Inventory.xml"></XML> <H2>Find Elements by Element Name</H2> Element name:<INPUT TYPE="TEXT" ID="ElementName"> <BUTTON ONCLICK="ShowElements()">Show Elements</BUTTON> <HR> <DIV ID=ResultDiv></DIV> </BODY> </HTML> |








