????今天寫了這樣一段代碼:
<
script?language
=
"
javascript
"
>
???
function
?testXml()
???
{
??????
var
?objXml?
=
?
new
?ActiveXObject('MSXML2.DOMDocument');
??????
var
?strXml?
=
"
<xml><aa>abcd</aa></xml>
"
;
??????objXml.setProperty(
"
SelectionLanguage
"
,
"
XPath
"
);
?????
??????objXml.loadXML(strXml);
??????
var
?objaa?
=
?objXml.selectSingleNode(
"
xml/aa[0]
"
);
??????alert(objaa.text);
???}
???testXml();
</
script
>
?? 系統拋出異常,未找到對象。也就是objXml.selectSingleNode("xml/aa[0]");返回的是null。"xml/aa[0]"是如此簡單的表達式,錯誤只有可能出在"[0]"上。查閱了一些資料后,將objXml.selectSingleNode("xml/aa[0]");修改成objXml.selectSingleNode("xml/aa[1]"),運行通過成功找到了節點。原來Xpath中節點計數是從1開始的。
??? 也許事情不是這樣簡單,我曾經隱約記得寫過objXml.selectSingleNode("xml/aa[0]")這樣的代碼,并且也能正確的找到節點。我將代碼進行了以下修改:
<
script?language
=
"
javascript
"
>
???
function
?testXml()
???
{
??????
var
?objXml?
=
?
new
?ActiveXObject('MSXML2.DOMDocument');
??????
var
?strXml?
=
"
<xml><aa>abcd</aa></xml>
"
;
??????
//
objXml.setProperty("SelectionLanguage","XPath");不再采用Xpath方式
?????
??????objXml.loadXML(strXml);
??????
var
?objaa?
=
?objXml.selectSingleNode(
"
xml/aa[1]
"
);
??????alert(objaa.text);
???}
???testXml();
</
script
>
???? 系統拋出異常,提示未找到對象。難道非Xpath方式選取節點,節點計數是從0開始的?我將objXml.selectSingleNode("xml/aa[1]")修改成objXml.selectSingleNode("xml/aa[0]"),代碼成功運行,并且找到節點。
??? 由此我們不難看出,非Xpath方式選取節點時,第一個節點用[0]來標示;而用Xpath方式選取節點時,第一個節點用[1]來標示。注意,只有在MSXML2.DOMDocument 4.0以下版本才默認采用非Xpath方式選取節點,即類似正則表達式的方式選取。
???? 為什么會造成這種情況呢?也許是當年微軟設計該組件的時候Xpath標準還沒有正式出臺,也或者是Xpath標準沒有兼顧微軟以前的設計,出現了最不應該出現的不兼容性。















??? 也許事情不是這樣簡單,我曾經隱約記得寫過objXml.selectSingleNode("xml/aa[0]")這樣的代碼,并且也能正確的找到節點。我將代碼進行了以下修改:















??? 由此我們不難看出,非Xpath方式選取節點時,第一個節點用[0]來標示;而用Xpath方式選取節點時,第一個節點用[1]來標示。注意,只有在MSXML2.DOMDocument 4.0以下版本才默認采用非Xpath方式選取節點,即類似正則表達式的方式選取。
???? 為什么會造成這種情況呢?也許是當年微軟設計該組件的時候Xpath標準還沒有正式出臺,也或者是Xpath標準沒有兼顧微軟以前的設計,出現了最不應該出現的不兼容性。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
