SelectSingleNode retourner null connu un bon nœud xml chemin à l'aide de XPath

Considérer ce document XML simple. Le XML sérialisé montré ici est le résultat d'un XmlSerializer à partir d'un complexe POCO objet dont le schéma je n'ai aucun contrôle sur.

<My_RootNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="">
  <id root="2.16.840.1.113883.3.51.1.1.1" extension="someIdentifier" xmlns="urn:hl7-org:v3" /> 
  <creationTime xsi:nil="true" xmlns="urn:hl7-org:v3" />      
</My_RootNode>

L'objectif est d'extraire la valeur de l'attribut d'extension sur l'id de nœud. Dans ce cas, nous utilisons le SelectSingleNode méthode, et une expression XPath en tant que tel:

XmlNode idNode = myXmlDoc.SelectSingleNode("/My_RootNode/id");
//idNode is evaluated to null at this point in the debugger!
string msgID = idNode.Attributes.GetNamedItem("extension").Value;

Le problème est que le SelectSingleNode méthode renvoie null pour l'expression XPath.

Question: toutes les idées sur cette requête XPath de l'exactitude, ou pourquoi l'appel de cette méthode + expression XPath doit retourner une valeur nulle? Peut-être les espaces de noms sont une partie du problème?

  • Première chose à faire est de vérifier si le document XML a été correctement chargé. Je peux voir un vide attribut xmlns à la fin du nœud racine - est-ce que le droit?
  • Correct, nous sommes à la recherche à un XmlDocument qui a chargé la chaîne de production d'un XmlSerializer.
  • est-ce un gros document (HL7!)? Si oui, alors vous pouvez essayer de sérialisation directement dans le XmlDocument. Si vous voulez un exemple de cela, laissez-moi savoir.
InformationsquelleAutor p.campbell | 2009-07-06