我想在特定位置更新复杂的XML文件属性值

时间:2014-01-29 02:40:11

标签: c# asp.net 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 个答案:

答案 0 :(得分:0)

如果我了解您的要求,那么您正在寻找一个text属性值为Pen的元素。您想要更改image元素的URL。如果因此,您可以使用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);
   }
}