以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  [原创]获取当前节点对象的xPath~  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=18388)


--  作者: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>


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
4,835.938ms