2012-03-06 8 views
0

私のXMLは次のようになります。同じレベルの別のノードに基づいてXMLノードの値を変更するにはどうすればよいですか?

<?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> 

私は私に利用できるURL値を持っている場合は、どのように私は、対応するタイトルの値を変更するに行きますか?私はそれを理解しようとしてきましたが、私はロードブロックを打っています。

+0

あなたはどのようなコードを、これまで試みたが、うまくいかないものを持っていますか? –

+0

なぜWPFでこの質問にタグを付けるのですか? – AngeloBad

+0

まあ、私はcurrentDoc.DocumentElement.SetAttribute( "image [url = '" + imageLocation + "']"、 "ここで新しいURL値")のようなものを使用しようとしていました。 ですが、パスの値が嫌いでした。私は誰かがそれを行う方法を知っていることを望んでいた – Blake

答えて

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

注意:このコードは例外をスローする。名前url(null参照例外)、一致するURLがValue(null参照例外)にない要素がなく、名前のタイトル(null参照例外)を持つ要素がありません。 –

+0

これは動作します。ありがとうございました! – Blake

1

あなたがLinqToXmlを使用している場合、それは次のようになります。(あなたが重複するURLを持っていないと仮定)

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

これも同様に動作します!驚くばかり!どうもありがとうございます!私はそれらの両方を回答として評価したいが、私は他のものを使用して巻いた。それで私はどちらも選択することはできない。 – Blake

関連する問題