更新 感謝florent我現在意識到我在問題中使用了錯誤的術語(最初是:'沒有定義名稱空間的XML文檔的名稱空間是什麼?')。
另外,我想現在我問了兩個問題:
1.能爲一個沒有前綴的XML文檔分配一個前綴嗎? (可能是的,但是如何用傳統的ASP來做到這一點?)
2.什麼是沒有定義前綴的XML文檔中節點的XPath位置路徑?如果這甚至是可能的。沒有定義前綴的XML文檔的前綴是什麼?
我有傳統ASP代碼以檢索使用MSXML2.ServerXMLHTTP.6.0對象的XML文檔,但是XML文檔不具有前綴限定。我無法改變XML文檔的製作方式。
這是XML的外觀:
<?xml version="1.0" standalone="yes"?>
<SearchResultsResponse xmlns="http://openapi.somesite.com/openapi-3.0.0">
[...]
</SearchResultsResponse>
文檔會自動解析和accessable低谷.responseXML財產。但隨着查找節點:
Set objData = obj_http.responseXML.selectSingleNode("//someNodeName")
Response.Write "Data: " & objData.Text
不起作用。 (我收到了「對象需要」錯誤消息,這意味着沒有節點被發現。)而
Response.Write obj_http.responseXML.documentElement.prefix
給我一個空字符串。使這項工作
一種方法是使用.selectSingleNode("//*[local-name() = 'someNodeName']")
,但我想這不是更大的XML文檔非常有效的。 (或者我錯了嗎?)
我讀過類似於:.selectSingleNode("//ns:rootNodeName/ns:childNodeName")
,其中'ns'是定義的前綴,應該是要走的路,但是如果沒有定義,我應該如何使用前綴?
你是絕對正確的。作爲XML的新手,我使用了錯誤的術語。我會更新我的問題。 –
我不熟悉msxml,所以我不能多說這個特例。但是你總是可以在解析器中重新定義前綴(例如在xslt中),然後在你的xpath中使用這個前綴。 – florent
看這裏:http://social.msdn.microsoft。COM /論壇/是/ xmlandnetfx /線程/ 5ae834d2-59ed-44d6-b6da-0a7bf5795caa 你應該能夠與屬性重新定義命名空間: objResponse.responseXML.setProperty( 「SelectionNamespaces」,「的xmlns:myns名字= 'http://openapi.somesite.com/openapi-3.0.0'「) objResponse.responseXML.selectSingleNode(」// someNodeName「) – florent