js在xml中根據日期使用xpath查詢記錄的方法
js在xml中根據日期使用xpath查詢記錄的方法
qq:9611153 微信lgs9611153
時間:2008-11-27 9:38
背景原因:
很久之前碰到的問題,覺得有意思分享一下。
解決方案:
<HTML> <HEAD> <TITLE>Example</TITLE>
</HEAD> <BODY>
<SCRIPT LANGUAGE="JScript"> Date.prototype.Format = var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小時 "m+" "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; }
//=================直接使用xpath================= function test0() { var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.5.0"); var oNamedNodeMap; xmlDoc.async = false; xmlDoc.resolveExternals = false; //xmlDoc.load("lib/DebugLog.xml"); xmlDoc.loadXML('<DebugLogSet><DebugLog Id="1" File="f:\\project\\tsclient\\config_info.cpp" Line="78" Date="2008-10-15 18:7:23" Type="1" Info="TestEvent!" /></DebugLogSet>'); var currNode; xmlDoc.setProperty("SelectionLanguage", "XPath"); //currNode = xmlDoc.documentElement.selectNodes("//*[@Line>'78']");//不需要> < currNodes = xmlDoc.documentElement.selectNodes("*[starts-with(@Date, \"2008-10-15\")]"); currNode = xmlDoc.documentElement.selectNodes("*[contains(@Date, \"2008-10-15\")]");//XPath1.0 函式 //currNodes = xmlDoc.documentElement.selectNodes("*[compare(@Date, \"2008-10-15\")=0]");//XPath2.0 函式 alert(currNode.length); ////DebugLogSet[DebugLog[@Date>'2008-10-15 18:7:23' and @Date<'2008-10-15 20:0:0']]/text() //text()=標記值 }
//================================== function getDatePath(sbdate,sedate) { // var sbdate = "2008-10-15"; // var sedate = "2008-10-15"; var bdate=new Date(Date.parse(sbdate.replace(/-/g,"\/"))); var edate=new Date(Date.parse(sedate.replace(/-/g,"\/"))); // alert(bdate.valueOf()); // alert(edate.valueOf()); // alert(bdate==edate);//false // alert(bdate.valueOf()==edate.valueOf());//true
// alert(date.toDateString()); // date.setDate(date.getDate()+-2); // alert(date.toDateString());
var xpath = "*[ false "; while(bdate.valueOf()<=edate.valueOf()) { var bdates = bdate.Format("yyyy-MM-dd");//bdate.toDateString() xpath += " or starts-with(@Date, \""+bdates+"\")"; bdate.setDate(bdate.getDate()+1); } xpath += "]"; alert(xpath);//"*[starts-with(@Date, \"2008-10-15\")]" return xpath; } //以下是測試用程式碼--------------------------------------------------------------------- function test1() { var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.5.0"); var oNamedNodeMap; xmlDoc.async = false; xmlDoc.resolveExternals = false; //xmlDoc.load("lib/DebugLog.xml"); xmlDoc.loadXML('<DebugLogSet><DebugLog Id="1" File="f:\\project\\tsclient\\config_info.cpp" Line="78" Date="2008-10-15 18:7:23" Type="1" Info="TestEvent!" /></DebugLogSet>'); var xpath = getDatePath("2008-10-15","2008-10-16"); var currNodes; currNodes = xmlDoc.documentElement.selectNodes(xpath);//XPath1.0 函式 alert(currNodes.length); if(currNodes.length>0){ var sdate = currNodes.item(0).attributes[1].nodeValue; alert(sdate); } } </SCRIPT> <BUTTON onclick="test1()">Click Me!</BUTTON>
</BODY> </HTML>
|
結果