XML是一套定義語(yǔ)義標(biāo)記的規(guī)則,這些標(biāo)記將文檔分成許多部件并對(duì)這些部件加以標(biāo)識(shí)。由于XML具備諸多的優(yōu)點(diǎn),XML被越來(lái)越為廣泛地使用。
我們開發(fā)員更是會(huì)經(jīng)常使用XML來(lái)存儲(chǔ)信息或者交換數(shù)據(jù),而XPath是用來(lái)高效處理XML文檔的方法。XPath是種可以在XML文檔中查找信息的語(yǔ)言,可以通過(guò)XPath表達(dá)式在XML文檔中快速定位。相比一層層節(jié)點(diǎn)的遞歸來(lái)說(shuō),它的代碼可讀性更高,易維護(hù),效率高。而且XQuery和XPointer也是建立在XPath之上,所以在應(yīng)用開發(fā)中使用XPath頻率會(huì)比較高。
寫一個(gè)簡(jiǎn)單的XPath到不是一件難事,或許也可以不調(diào)試跟蹤。但對(duì)于復(fù)雜的文檔或XPath表達(dá)式,最好先驗(yàn)證,難通過(guò)跟蹤調(diào)試的方式來(lái)確定正確性的方式是不可取的。XPath Tester工具就是一個(gè)驗(yàn)證XPath正確性的工具,它是基于MSXML實(shí)現(xiàn)。
安裝環(huán)境:
OS:windows xp及以上。
這個(gè)工具的實(shí)現(xiàn)較簡(jiǎn)單,可以很容易地寫出來(lái)。稍難的可能是處理名字空間的方法,下面附上這部份源碼。
1 LPCTSTR g_szSelectionLanguage = _T("SelectionLanguage");
2 LPCTSTR g_szXPath =_T("XPath");
3 LPCTSTR g_szXmlns = _T("xmlns:");
4 LPCTSTR g_szSelectionNamespaces =_T("SelectionNamespaces");
5 TCHAR g_cComma = _T(',');
6
7 void ParseXmlns(MSXML2::IXMLDOMDocument2Ptr &docPtr, LPCTSTR szXmlns)
8 {
9 int nLen;
10 if(!szXmlns || (nLen = _tcslen(szXmlns))== 0)
11 {
12 return;
13 }
14
15 docPtr->setProperty(g_szSelectionLanguage, g_szXPath);
16 const short BUFFLEN = 200;
17 TCHAR szNameBuf[BUFFLEN];
18 TCHAR *pStart = const_cast<TCHAR*>(szXmlns);
19 TCHAR *pEnd = _tcschr(pStart, g_cComma);
20
21 bool bQuit = false;
22 while (nLen && !bQuit)
23 {
24 if(!pEnd)
25 {
26 pEnd = pStart + nLen;
27 bQuit = true;
28 }
29 ZeroMemory(szNameBuf, sizeof(szNameBuf));
30 _tcsncpy_s(szNameBuf, BUFFLEN, pStart, pEnd - pStart);
31 if(_tcsnicmp(szNameBuf, g_szXmlns, _tcslen(g_szXmlns)) == 0)
32 {
33 docPtr->setProperty(g_szSelectionNamespaces, szNameBuf);
34 }
35
36 pStart = pEnd + 1;
37 pEnd = _tcschr(pStart, g_cComma);
38 nLen = _tcslen(pStart);
39 }
40 }
下載:
http://www.91box.net/?BOERZFW76FD5GAOJNYUIMD5: 96046c78f572f669aa8c600c1a6b06e5