Por que o XmlNamespaceManager é necessário?

Eu vim meio seco quanto aporqu - pelo menos no .Net Framework - é necessário usar umXmlNamespaceManager para lidar com namespaces (ou o mais desajeitado e detalhado[local-name()=... Predicado / função / o que for XPath) ao executar consultas XPath. EUFa entender por que os namespaces são necessários ou pelo menos benéficos, masporqu é tão complexo?

Para consultar um documento XML simples (sem espaços para nome) ...

<?xml version="1.0" encoding="ISO-8859-1"?>
<rootNode>
   <nodeName>Some Text Here</nodeName>
</rootNode>

... pode-se usar algo comodoc.SelectSingleNode("//nodeName") (que corresponderia a<nodeName>Some Text Here</nodeName>)

Mystery # 1: Meu primeiro aborrecimento - Se bem entendi - é apenas adicionar uma referência de espaço para nome à marca pai / raiz (usada como parte de uma marca de nó filho ou não) assim:

<?xml version="1.0" encoding="ISO-8859-1"?>
<rootNode xmlns="http://someplace.org">
   <nodeName>Some Text Here</nodeName>
</rootNode>

... requer várias linhas de código extras para obter o mesmo resultado:

Dim nsmgr As New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("ab", "http://s+omeplace.org")
Dim desiredNode As XmlNode = doc.SelectSingleNode("//ab:nodeName", nsmgr)

... basicamente sonhando com um prefixo inexistente ("ab ") para encontrar um nó que nem usa um prefixo.Como isso faz sentido O que há de errado (conceitualmente) comdoc.SelectSingleNode("//nodeName")?

Mystery # 2: Então, digamos que você tenha um documento XML que use prefixos:

<?xml version="1.0" encoding="ISO-8859-1"?>
<rootNode xmlns:cde="http://someplace.org" xmlns:feg="http://otherplace.net">
   <cde:nodeName>Some Text Here</cde:nodeName>
   <feg:nodeName>Some Other Value</feg:nodeName>
   <feg:otherName>Yet Another Value</feg:otherName>
</rootNode>

... Se bem entendi, você teria que adicionar os dois namespaces aoXmlNamespaceManager, para fazer uma consulta para um único nó ...

Dim nsmgr As New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("cde", "http://someplace.org")
nsmgr.AddNamespace("feg", "http://otherplace.net")
Dim desiredNode As XmlNode = doc.SelectSingleNode("//feg:nodeName", nsmgr)

... Por que, nesse caso, preciso (conceitualmente) de um gerenciador de namespac

** REVISADO nos comentários abaixo **

Edit Adicionado: Minha pergunta revisada e refinada é baseada na aparente redundância do XmlNamespaceManager no que acredito ser a maioria dos casos e no uso do gerenciador de namespace para especificar um mapeamento de prefixo para URI:

Quando o mapeamento direto do prefixo do espaço para nome ("cde") para o URI do espaço para nome ("http://someplace.org") é explicitamente declarado no documento de origem:

...<rootNode xmlns:cde="http://someplace.org"...

ual é a necessidade conceitual de um programador recriar esse mapeamento antes de fazer uma consult

questionAnswers(6)

yourAnswerToTheQuestion