2016-10-12 1 views
0

ci-dessous est le fichier XML que je veux mettre à jour (par exemple - modifier l'attribut dateTime dans l'élément de journal).Modifier la valeur de l'élément dans le fichier XML qui est basé sur le schéma raml21.xsd dans asp.net

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<raml xmlns="raml21.xsd" version="2.1"> 
    <cmData id="3221225472" scope="all" type="plan"> 
    <header> 
     <log action="created" appInfo="Nokia BTS Site Manager" appVersion="FL16" dateTime="2016-09-23T17:59:59" user="BTSSM"/> 
    </header> 
    </cmData> 
</raml> 

Voici mon code:

filePath = openFileDialogXml.FileName; 
XmlDocument document = new XmlDocument(); 
document.Load(filePath); 
XmlElement node1 = document.SelectSingleNode("/header/log") as XmlElement; 
if (node1 != null) 
{ 
    node1.Attributes[3].Value = "test"; 
} 
document.Save(filePath); 

Mais, le problème est: node1 est toujours nulle. Je maintenant le problème mettras ce ligne dans le fichier xml:

raml xmlns="raml21.xsd" version="2.1" 

Répondre

0

Vous devez tenir l'espace de noms quand trouver des éléments. Et inclure tous les éléments entre la cible et la racine dans le XPath

Utilisez la surcharge de SelectSingleNode qui prend un XmlNamespaceManager, ayant configuré ce dernier pour inclure l'espace de noms requis.

Quelque chose comme:

XmlNamespaceManager mgr = new XmlNamespaceManager(document.NameTable); 
mgr.AddNamespace("x", "raml21.xsd"); 
var node1 = document.SelectSingleNode("/x:raml/x:cmData /x:header/x:log", mgr) as XmlElement; 
+0

Il travaille maintenant. Merci beaucoup. – Zoc