-- 作者:ssm1226
-- 发布时间:5/16/2005 4:37:00 PM
-- [原创]获取当前节点对象的xPath~
获取节点的xpath <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title></title> <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1"> <meta name=ProgId content=VisualStudio.HTML> <meta name=Originator content="Microsoft Visual Studio .NET 7.1"> </head> <body> <script language=javascript> var xmldoc=new ActiveXObject("MSXML2.DOMDocument"); xmldoc.async=false; xmldoc.load("csdn0016.xml"); var oNode=xmldoc.documentElement.selectSingleNode("/menus/menu[0]"); var sPath=getXPath(oNode); function getXPath(oNode){ if(oNode==null) return null; if(oNode.nodeType==1 || oNode.nodeType==2 || oNode.nodeType==3 || oNode.nodeType==4){//节点类型为:Element,Attribute,text,section时返回XPath var oXmlDoc=oNode.ownerDocument; var sSelectionLanguage=oXmlDoc.getProperty("SelectionLanguage"); if(sSelectionLanguage!="XPath") oXmlDoc.setProperty("SelectionLanguage", "XPath");//设置查询语言为XPath var spath="ancestor-or-self::*";//祖先节点 var oNodesTemp=oNode.selectNodes(spath); spath="preceding-sibling::";//获取当前节点前兄弟节点 var sTemp="",oNodeTemp=null,oSubNodeTemp=null; for(var i=0;i<oNodesTemp.length;i++){ oNodeTemp=oNodesTemp[i]; oSubNodeTemp=oNodeTemp.selectNodes(spath + oNodeTemp.nodeName); sTemp+="/"+oNodeTemp.nodeName; if(oSubNodeTemp.length>0) sTemp+="[" + oSubNodeTemp.length + "]"; } oXmlDoc.setProperty("SelectionLanguage", sSelectionLanguage);//设置查询语言为默认 if(oNode.nodeType==2){//如果是属性的话,加上 sTemp +="/@" + oNode.nodeName; } return sTemp; }else{return "";} } alert(sPath); </script> </body> </html> csdn0016.xml: <?xml version="1.0" encoding="UTF-8"?> <menus> <a/> <b/> <menu> <name id="1">web开发</name> <menus> <menu> <name>asp</name> </menu> <menu> <name>xml</name> </menu> </menus> </menu> <menu> <name>.Net Framework</name> <menus> <menu> <name>asp.asp</name> </menu> <menu> <name>C#</name> </menu> </menus> </menu> </menus>
|