Update
Thanks to florent I now realize I used the wrong term in the question (originally: 'What is the namespace of an XML document which does not have a namespace defined?').
Also, I think now I am asking two questions:
1. can one assign a prefix to an XML document which does not have a prefix? (probably yes, but how does one do this with classic ASP?)
2. what is the XPath location path of a node in an XML document which does not have a prefix defined? If this is even possible.
I have classic ASP code which retrieves an XML document using the MSXML2.ServerXMLHTTP.6.0 object, but the XML document does not have a prefix defined. I can't change the way the XML document is made.
This is how the XML looks:
<?xml version="1.0" standalone="yes"?>
<SearchResultsResponse xmlns="http://openapi.somesite.com/openapi-3.0.0">
[...]
</SearchResultsResponse>
The document is automatically parsed and accessable trough the .responseXML property. But looking up nodes with:
Set objData = obj_http.responseXML.selectSingleNode("//someNodeName")
Response.Write "Data: " & objData.Text
doesn't work. (I get a 'Object Required' error message, meaning no node was found.) And
Response.Write obj_http.responseXML.documentElement.prefix
gives me an empty string.
One way to make this work is to use .selectSingleNode("//*[local-name() = 'someNodeName']")
, but I guess this is not very efficient in larger XML documents. (Or am I wrong there?)
I have read that something like: .selectSingleNode("//ns:rootNodeName/ns:childNodeName")
, where 'ns' is the prefix defined, should be the way to go, but then what should I use for the prefix if none is defined?
I finally figured it out:
Dim obj_XML
Set obj_XML = obj_http.responseXML
' this is where the magic happens, 'ns' is defined as the prefix:
obj_XML.setProperty _
"SelectionNamespaces", _
"xmlns:ns='http://openapi.somesite.com/openapi-3.0.0' " &_
"xmlns:xs='http://www.w3.org/2001/XMLSchema'"
Dim obj_node
' now we can get the node with an XPath location path with the 'ns' prefix:
Set obj_node = obj_XML.selectSingleNode("//ns:SearchResultsResponse/ns:SessionId")
If obj_node Is Nothing Then
Response.Write "# No node found #<br />"
Else
Response.Write "Node text: " & obj_node.Text & "<br />"
End If