J'ai un code pour obtenir les noeuds d'un élément Root :
xmlNodes = rootElement.SelectNodes("DefinitionName");
Il ne renvoie pas les noeuds qui existent. Dans le débogueur, je peux développer rootElement pour trouver DefinitionName. Apparemment, le problème vient du fait que le fichier a un espace de nom défini (voir XML ci-dessous). MSDN dit que je dois faire quelque chose comme ça pour que les noeuds reviennent :
Note : Cela n'a rien à voir avec mon code. C'est l'exemple de MSDN :
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");
XmlNodeList nodelist = doc.SelectNodes("//ab:book", nsmgr);
J'ai deux questions :
- Pourquoi l'espace de noms est-il important ? Si je veux un noeud, et qu'il existe, donnez-le moi.
- Mon application traite de nombreux fichiers XML. Comment suis-je censé spécifier l'espace de nom (
nsmgr.AddNamespace()
) ? Dois-je d'abord analyser le fichier pour l'obtenir ?
Je ne peux pas m'empêcher de penser que je prends le chemin le plus long et le plus angoissant pour y arriver.
C'est le XML :
<?xml version="1.0" encoding="utf-8"?>
<SessionStateInfo xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
z:Id="1" z:Type="Company.Apps.MoreHere.Session.SessionStateInfo"
z:Assembly="assembly info here"
xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"
xmlns="http://schemas.datacontract.org/2004/07/MoreHere.Session">
<CoaterNumber>25</CoaterNumber>
<DefinitionName z:Id="2">Two Line</DefinitionName>
<EnableManualMode>true</EnableManualMode>