我遇到了選擇具有MSXML中的名稱空間的節點的問題。該XML已被ADODB記錄生成的,看起來像這樣:XML DOM SelectSingleNode()與名稱空間不返回節點
<xml>
<s:Schema id="RowsetSchema" >
<s:ElementType name="row" content="eltOnly" rs:updatable="true" >
<s:AttributeType name="ID" rs:number="1" rs:basecatalog="SystemDB" rs:basetable="pagehits" rs:basecolumn="ID" rs:keycolumn="true" rs:autoincrement="true" >
<s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" rs:maybenull="false" />
</s:AttributeType>
<s:AttributeType name="SessionCode" rs:number="2" rs:writeunknown="true" rs:basecatalog="SystemDB" rs:basetable="pagehits" rs:basecolumn="SessionCode" >
<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="36" rs:fixedlength="true" rs:maybenull="false" />
</s:AttributeType>
<s:AttributeType name="PagePath" rs:number="3" rs:writeunknown="true" rs:basecatalog="SystemDB" rs:basetable="pagehits" rs:basecolumn="PagePath" >
<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="100" rs:maybenull="false" />
</s:AttributeType>
<s:AttributeType name="PersID" rs:number="4" rs:writeunknown="true" rs:basecatalog="SystemDB" rs:basetable="pagehits" rs:basecolumn="PersID" >
<s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" rs:maybenull="false" />
</s:AttributeType>
<s:AttributeType name="PersonInfo" rs:number="5" rs:writeunknown="true" rs:basecatalog="SystemDB" rs:basetable="pagehits" rs:basecolumn="PersonInfo" >
<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="100" rs:maybenull="false" />
</s:AttributeType>
<s:AttributeType name="CRD" rs:number="6" rs:writeunknown="true" rs:basecatalog="SystemDB" rs:basetable="pagehits" rs:basecolumn="CRD" >
<s:datatype dt:type="dateTime" rs:dbtype="timestamp" dt:maxLength="16" rs:scale="3" rs:precision="23" rs:fixedlength="true" rs:maybenull="false" />
</s:AttributeType>
<s:extends type="rs:rowbase" />
</s:ElementType>
</s:Schema>
<rs:data>
<z:row ID="1" SessionCode="2CA43F6A-3951-42C5-8FF4-C6409026ED3A" PagePath="/pages/home/home.asp" PersID="2" PersonInfo="User395959" CRD="2014-04-07T23:30:38.090000000" />
<z:row ID="2" SessionCode="2CA43F6A-3951-42C5-8FF4-C6409026ED3A" PagePath="/pages/home/home.asp" PersID="2" PersonInfo="User395959" CRD="2014-04-07T23:30:51.180000000" />
<z:row ID="3" SessionCode="2CA43F6A-3951-42C5-8FF4-C6409026ED3A" PagePath="/pages/home/home_v02.asp" PersID="2" PersonInfo="User395959" CRD="2014-04-07T23:30:51.240000000" />
<z:row ID="4" SessionCode="2CA43F6A-3951-42C5-8FF4-C6409026ED3A" PagePath="/pages/home/home.asp" PersID="2" PersonInfo="User395959" CRD="2014-04-07T23:30:54.180000000" />
<z:row ID="5" SessionCode="2CA43F6A-3951-42C5-8FF4-C6409026ED3A" PagePath="/pages/home/home_v02.asp" PersID="2" PersonInfo="User395959" CRD="2014-04-07T23:30:54.213000000" />
</rs:data>
</xml>
我已加載XML字符串到一個名爲oXMLDoc的XML文檔。我現在要選擇S:架構節點,所以我已經使用這個代碼選擇節點,並報告所選擇的節點對象的類型:
oXMLDoc.setProperty "SelectionNamespaces", " xmlns:s='http://dev.kauupm.com/ns_s' "
dim oSchemaNode: set oSchemaNode = oXMLDoc.DocumentElement.SelectSingleNode("//s:Schema")
oTracer.Trace "", "Schema node is type: " & typeName(oSchemaNode)
或跟蹤報告的結果是類型爲Nothing ,所以節點沒有找到。
我已經嘗試了許多xpath的不同組合,無濟於事。但是,如果在將XML文本加載到XML對象中之前從XML文本中刪除所有名稱空間,那麼選擇沒有名稱空間的Schema節點,它可以正常工作!所以,問題出在命名空間的某個地方,但我看不到我做錯了什麼,我感到非常困惑。
我正在使用Msxml2.FreeThreadedDOMDocument.6.0。
任何幫助非常讚賞 - 約翰
您發佈不聲明任何命名空間(它沒有了xmlns =「HTTP://dev.kauupm.com/ns_s」的XML屬性實際上它應該申報所有你需要的前綴。 。 – helderdarocha 2015-02-23 18:40:51
@helderdarocha感謝您的評論 - 我認爲這讓我對問題的答案 - 我將很快發佈。 – JohnRC 2015-02-24 15:53:35