2012-03-06 14 views
0

Mon XML ressemble à ceci:Comment changer la valeur d'un nœud XML basé sur un autre nœud au même niveau?

<?xml version = "1.0" encoding = "utf-8"?> 
<gallery> 
    <name>Rosie's Gallery</name> 
    <image> 
    <order>0</order> 
    <url>images/HappyIcon.jpg</url> 
    <title>Happy</title> 
    </image> 
    <image> 
    <order>1</order> 
    <url>images/SickIcon.jpg</url> 
    <title>Sick</title> 
    </image> 
</gallery> 

Si j'ai la valeur url disponible pour moi, comment pourrais-je aller à changer la valeur de titre correspondant? J'ai essayé de comprendre mais je frappe un barrage routier.

+0

Quel code avez-vous essayé jusqu'à présent, et ce qui se passe mal? –

+0

Pourquoi étiqueter cette question avec WPF? – AngeloBad

+0

Eh bien j'essayais d'utiliser quelque chose comme currentDoc.DocumentElement.SetAttribute ("image [url = '" + imageLocation + "']", "nouvelle valeur d'URL ici"); mais n'a pas aimé la valeur du chemin. J'espérais que quelqu'un sache comment le faire – Blake

Répondre

1
XDocument xDoc = XDocument.Load(new StringReader(xmlstr)); 
string url="images/SickIcon.jpg"; 

var image = xDoc.Descendants("image") 
       .Where(x => x.Element("url").Value == url) 
       .First(); 
image.Element("title").Value = "Renamed Value"; 
+0

Attention: Ce code lèvera une exception si; il n'y a pas d'élément avec un nom d'url (exception de référence nulle), pas d'URL correspondant à Value (exception de référence nulle) ou il n'y a pas d'élément avec un titre de nom (exception de référence nulle). –

+0

Cela fonctionne. Je vous remercie! – Blake

1

Si vous utilisez LinqToXml il ressemblerait à ceci: (en supposant que vous n'avez pas urls en double)

var urlValue = "images/SickIcon.jpg"; 
var newTitle = "New Title"; 

XDocument xdoc = XDocument.Load("<uri to file>"); 
XElement xImage = XDocument.root 
    .Descendants("image") 
    .FirstOrDefault(element => element.Elements("url").Any() 
          && element.Elements("title").Any() 
          && element.Elements("url").First().Value == urlValue); 

if (xImage != null) 
{ 
    xImage.Elements("title").First().Value = newTitle; 
} 
+0

cela fonctionne aussi bien! impressionnant! Merci beaucoup! Je les évaluerais tous les deux comme la réponse mais j'ai fini par utiliser l'autre et il ne me laissera pas choisir les deux je pense – Blake

Questions connexes