j'ai donc un document XML qui ressemble à ceci:
retourne SelectSingleNode null
<?xml version="1.0" encoding="UTF-8"?>
<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
<gesmes:subject>Reference rates</gesmes:subject>
<gesmes:Sender>
<gesmes:name>European Central Bank</gesmes:name>
</gesmes:Sender>
<Cube>
<Cube time="2010-05-28">
<Cube currency="USD" rate="1.2384"/>
<Cube currency="JPY" rate="113.06"/>
</Cube>
<Cube time="2010-05-27">
<Cube currency="USD" rate="1.2255"/>
<Cube currency="JPY" rate="110.79"/>
</Cube>
</Cube>
</gesmes:Envelope>
Supposons maintenant que j'ai un XmlNode timeNode
qui pointe vers <Cube time="2010-05-28">
noeud et un document
qui pointe vers le document XML chargé. Disons que j'ai besoin d'obtenir la valeur de l'attribut rate
dans le nœud <Cube currency=USD" rate="1.2384"/>
en appelant une méthode SelectSingleNode(string xpath)
.
Jusqu'à présent, j'ai pu venir avec ce code:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);
nsmgr.AddNamespace("ecb", "http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
nsmgr.AddNamespace("gesmes", "http://www.gesmes.org/xml/2002-08-01");
XmlNode currencyNode = timeNode.SelectSingleNode("descendant::ecb:Cube[@ecb:currency='USD']", nsmgr);
string rate = currencyNode.Attributes.GetNamedItem("rate").Value;
Le problème ici est que currencyNode
est réglé sur null ici. J'ai vérifié le timeNode
et il pointe vers le bon noeud, donc je suppose que le problème est avec le chemin dans la méthode SelectSingleNode
, mais je ne vois pas où est le problème. J'ai vérifié d'autres messages avec le même problème mais je n'ai rien trouvé qui puisse résoudre les mines. Tout pointeur sera apprécié.
Merci. Travaillé parfaitement. Grand pointeur sur l'espace de noms des attributs, je ne le savais pas. –