2014-01-29 55 views
0

我想更新我在特定位置上的XML。請幫忙。今天是我提交項目的最後日期。我想更新特定位置上的XML文件屬性值

<?xml version="1.0" encoding="utf-8"?> 
<A> 
    <B> 
    <C> 
     <D> 
     Item1 
     </D> 
     <E> 
     <F type="id" text="Item type"> 
      <E> 
      <G type="id" width="" text="Pen"> 
      <image name="Pen1" url="www.mysite.com"></image> 
      </G> 
      </E> 
      <E> 
      <G type="id" width="" text="Pencil"> 
       <image name="Pen1" url="www.mysite2.com"></image> 
      </G> 
      </E> 


     </F> 
     </E> 
     <D> 
     Item2 
     </D> 
     <E> 
     <F type="id" text="Item type"> 
      <E> 
      <G type="id" width="" text="Book"> 
       <image name="Pen1" url="www.mysite3.com"></image> 
      </G> 
      </E> 
      <E> 
      <G type="id" width="" text="Book2"> 
       <image name="Pen1" url="www.mysite4.com"></image> 
      </G> 
      </E> 


     </F> 
     </E> 
    </C> 
    </B> 
</A> 

以前我知道D元素vaue,F,G屬性的Text值,需要更新圖片的URL。 請幫助,我無法搜索確切的網址。 我用

XmlDocument doc = new XmlDocument(); 
doc.Load(xmlPath); 

XmlNodeList elemList = doc.GetElementsByTagName("F"); 
XmlNodeList subelemlist = doc.GetElementsByTagName("G"); 
for (int i = 0; i < elemList.Count; i++) 
         { 
          string attrVal = elemList[i].Attributes["text"].Value; 
          if (attrVal == "Pen") 
          { 

           for (int j = i - 1; j < subelemlist.Count; j++) 
           { 
            string attrval2 = subelemlist[j].Attributes["URL"].Value; 
            subelemlist[j].Attributes["URL"].Value = colURL; 
            doc.Save(xmlPath); 
            break; 
           } 
          } 

         } 
+1

最後一天,你還沒有寫任何代碼?查找XLinq和XDocument對象。然後它會很容易。這裏沒有人會爲你寫你的解決方案。 –

+0

你的問題還不清楚,你的標準是什麼?你想改變哪個「URL」? –

+0

嗨大衛謝謝,但我已經嘗試過XML文本閱讀器,並與XmlNodeList的XDocument,但我faild。我沒有XPath的知識。 – user3151262

回答

0

如果我理解你的要求,你正在尋找你想改變image元素的URL。如果這樣,有一個text性質與Pen value.And的元素,你可以用LINQ to XML:以下

var xDoc = XDocument.Load(xmlPath); 
var elements = xDoc.Descendants() 
        .Where(x => (string)x.Attribute("text") == "Pen"); 
        .ToList(); 

foreach(var item in elements) 
{ 
    var imageElement = item.Elements("image").FirstOrDefault(); 
    if(imageElement != null) 
    { 
     imageElement.Attribute("url").Value = newUrl; // change the url value 
     xDoc.Save(xmlPath); 
    } 
} 
+0

Thnaks我現在試圖.. – user3151262

+0

多次保存似乎是一種浪費,雖然。 –

+0

我的元素名稱以ns1開頭,例如ns1:image。所以它的生成錯誤。':'字符,十六進制值0x3A,不能包含在名稱中。 – user3151262