JavaScript-XPath ã¨ã¯
JavaScript-XPath ã¯ã DOM 3 XPath ãå®è£
ãã¦ããªããã©ã¦ã¶ã«å¯¾ãã¦ãå®ç¨çãªé度ã§åä½ãã DOM 3 XPath ã®ã¨ã³ã¸ã³ã追å ãã¾ãã
ä¸è¨ã§ä¹±æ´ã«è¨ã£ã¦ãã¾ãã°ãã©ã®ãã©ã¦ã¶ã§ã document.evaluate ã£ã¦é¢æ°ã§ XPath 使ããããã«ãªããï¼ã£ã¦ãã¨ã§ãã
以ä¸ãå ¬å¼ãµã¤ãã«ãªãã¾ãã
DOM 3 XPath ã£ã¦ãªããªã®ï¼ï¼
ãã£ã¡ãç°¡åï¼ã§ãã¡ãã£ã¨ã ãé©å½ï¼ãªDOM 3 XPath ã®èª¬æããã¾ãï¼ï¼ã
JavaScript ã§ãã使ã document.getElementById ã document.getElementsByTagName ã£ã¦é¢æ°ããã¾ãããï¼
DOM 3 XPath ã¯ããã®ãã¯ã¼ã¢ããçã®é¢æ° document.evaluate ã®ãã¨ã§ãï¼
ãã¼ãã¼ï¼
ã©ã®ããããã¯ã¼ã¢ãããã¦ããã¨ããã¨ããã
- document.getElementById ã§ã¯ id 屿§ã§ããåå¾ã§ããªããã© document.evaluate ã¯ã©ããªå±æ§ã®å¤ãããè¦ç´ ãåå¾ã§ãã¾ãï¼
- document.getElementsByTagName ã§ã¯è¦ç´ ã®ååï¼ã¿ã°ã®ååï¼ã§ããåå¾ã§ããªãã£ããã©ã tag ã 't' ããå§ã¾ããã¤ï¼ã¨ã div ã p ï¼ã¨ãã§ãã¾ãï¼
- ä»ã«ãã type 屿§ã text ã® input è¦ç´ ãå«ãã§ãã form è¦ç´ ãåå¾ï¼ã¨ããã§ãã¾ãï¼
ãããã§ããï¼
ã§ãããã®ä¾¿å©ãªé¢æ°ã£ã¦ä¸é¨ã®ãã©ã¦ã¶ã§ãã使ããªãã®ã§ãããããã§ã JavaScript-XPath ã使ãã¨ãã¹ã¦ã®ãã©ã¦ã¶ã§ DOM 3 XPath ã使ããããã«ãªããã§ãã
ãããã document.evaluate ã«ã¯ä½ã渡ãã°ããã®ï¼
ããã§ã XPath ã®ç»å ´ã§ãï¼
( ï¾âï¾)o彡ãXPathï¼XPathï¼
document.evaluate ã¯ä»¥ä¸ã®ããã«ä½¿ãã¾ãï¼
var result = document.evaluate( '//div', // ããã XPath ! document, // ã©ãããåå¾ããã ãã¨ãã°ã document.body ã¨ãã£ã¦ãã㨠head 以ä¸ã®è¦ç´ ã¯åå¾ãããªã null, // åºæ¬ä½¿ããªãã¨æã£ã¦ãã 7, // çµæã®ç¨®é¡ãæå®ãããåºæ¬ã¯ 6 ã 7 ã§ããã 6 ã ã£ããçµæãã½ã¼ããããªãå¯è½æ§ãããã null // åºæ¬ä½¿ããªã ); result.snapshotLength; // åå¾ããè¦ç´ ï¼æ£ç¢ºã«ã¯ãã¼ãï¼ã®æ°ã result.snapshotItem(0); // 1 åç®ã®è¦ç´ result.snapshotItem(1); // 2 åç®ã®è¦ç´
ãï¼ç°¡åã§ããï¼
XPath è¦ããªãããããã¼ãããã¼ãï¼
ããï¼ï¼ã§ãã XPath ã£ã¦è¶
ç°¡åã ãï¼
è¶
åºæ¬çãªãã¼ãã·ã¼ãã ãã
| å ¨è¦ç´ | //* | /descendant::* | |
| å ¨ div è¦ç´ | //div | /descendant::div | |
| class 屿§ã "hoge" 㪠div è¦ç´ | //div[@class="hoge"] | /descendant::div[@class="hoge"] | |
| id 屿§ã "hoge" ãªè¦ç´ | id("hoge") | //*[@id="hoge"] | /descendant::*[@id="hoge"] |
| title 屿§ã "hoge" ã§ class 屿§ã "fuga" ã§ãªãè¦ç´ | //*[@title="hoge" and @class!="fuga"] | /descendant::*[@title="hoge" and @class!="fuga"] | |
| form è¦ç´ ã® 3 çªç®ã® input è¦ç´ | //form/descendant::input[3] | /descendant::form/descendant::input[3] | *1 |
| ãã§ãã¯ããããã§ãã¯ããã¯ã¹ã®è¦ªè¦ç´ | //input[@checked="checked"]/.. | //input[@checked="checked"]/parent::node() |
JavaScript-XPath ã£ã¦ä½¿ãã®çµæ§ããã©ããã§ããï¼
éããï¼ããããéããï¼
è¶
ç°¡åã ãï¼ï¼
ã¨ãã訳ã§ã JavaScript-XPath ã使ãçºã® 3 ã¹ããããæãã¡ããã¾ãã
1. ææ°ã® JavaScript-XPath ããã¦ã³ãã¼ããã¦ãã
ãããããã¦ã³ãã¼ããã¦ãã
http://svn.coderepos.org/share/lang/javascript/javascript-xpath/trunk/release/javascript-xpath-latest.js
2. 以ä¸ã®ããã« HTML ãã¡ã¤ã«ã«ã¤ã³ãã¼ããã
<!-- ãããªæãã§ javascript-xpath-***.js ãèªã¿è¾¼ã --> <script src="javascript-xpath-latest.js"></script> <!-- ãã¦ã³ãã¼ããããã©ãã¦ãã¨ãããã使ã£ã¦ã¿ãã ãã ã£ããç´æ¥åç §ãã¦ã¿ãï¼ï¼ï¼æ¬çªç°å¢ã§ã¯ããªãã§ãï¼ï¼ï¼ <script src="http://svn.coderepos.org/share/lang/javascript/javascript-xpath/trunk/release/javascript-xpath-latest.js"></script> -->
3. ããã¦ã DOM 3 XPath ã使ãï¼
window.onload = function() { // div è¦ç´ å ¨é¨åã£ã¦ãã var r = document.evaluate('//div', document, null, 7, null); // ãã® '//div' ã XPathããããã¾ãç¥èãã // div è¦ç´ ã®æ° alert(r.snapshotLength); // æåã® div è¦ç´ alert(r.snapshotItem(0)); // 2 çªç®ã® div è¦ç´ alert(r.snapshotItem(1)); };
ã»ããã§ãã¡ãã£ãã§ããï¼
ãããããããã
ã¾ã¨ã
ãã²ãã²ã JavaScript-XPath ã使ã£ã¦ãã ããï¼
ãã®å¬ã XPath ãç±ãï¼
[ä½è«] ã§ãã JavaScript-XPath ã«ããã°ã¨ãããããããªãã®ï¼
JavaScript-XPath ã§ã¯ããç¨åº¦ã®ãã¹ãã¯ãã¦ãããåºæ¬çã«ã¯ãã°ã¯å°ãªãã¨æãã¾ãã
ã§ãã人ãä½ããã®ãªã®ã§ãå°ãã®ãã°ã¯ããã¨æãã¾ãï¼ï¼
ã§ãã®ã§ãããªãã®åã貸ãã¦ãã ããï¼ï¼
JavaScript-XPath ã§ã¯ä»¥ä¸ã®ãããªãã¹ããè¡ã£ã¦ãã¾ã
http://svn.coderepos.org/share/lang/javascript/javascript-xpath/trunk/test/functional/index.html
JavaScript-XPath ã«ããªãã®ãã¹ããã¡ã¤ã«ãæä¾ãã¦ãã ããï¼
ここ ã«ããªãã®ãµã¤ãã® HTML 㨠XPath ã¨ çµæãæ¸ãããã¹ããã¼ã¿ãæä¾ãã¦ãã ããï¼ï¼
ããããã°ãããªãã® XPath ããã¹ãã«çµã¿è¾¼ã¾ããåæ°¸ä¹
çã«ãµãã¼ãããããã¨ã§ãããï¼ï¼
ãã¹ããã¼ã¿ã¯ã CodeRepos ã®ã³ãããæ¨©ãåå¾ããã°èª°ã§ãæä¾ããäºãã§ãã¾ãã
ãã¹ããã¼ã¿ã®å½¢å¼
ãã¹ããã¼ã¿ã®å½¢å¼ã¯ä»¥ä¸ã®ãããªå½¢å¼ã§ãã
ãã¹ãã®ã¿ã¤ãã« -------- <html>HTMLã®å 容</html> -------- ã³ã³ããã¹ããã¼ãï¼ããã³çã«ã¯ / ã ãã§ããï¼ -------- XPath => çµæï¼CSS ã»ã¬ã¯ã¿ã®ããã« div.class#id[attributeName="attributeValue"] ã¨ãããããªæååã空ç½åºåãã§ ï¼ XPath => çµæ XPath => çµæ ï¼ ï¼
å ·ä½çã«ã¯こんな感じã®ãã¡ã¤ã«ã«ãªãã¾ãã
ãããããé¡ããã¾ãï¼