代码之家  ›  专栏  ›  技术社区  ›  Kanini

更新XElement(或克隆的XElement)的子属性

  •  0
  • Kanini  · 技术社区  · 16 年前

    我有一个XML,如下所示。

    <AFConfig>
     <Geographies>
      <Geography id="Place1" description="NicePlace">
       <MetaData>
        <Services>
         <Service>
         ...
         ...
         </Service>
        </Services>
       </MetaData>
       <Systems>
        <DefaultSystem systemName="SYSONE" server=http"//192.168.0.0" />
       </Systems>
      </Geography>
     <Geographies> 
    </AFConfig>
    

    我想做的就是这样。

    1. 克隆元素Geography并将其添加为同级元素(即Geography的子元素)
    2. 用新值更新“id”、“description” 和
    3. 用新值更新systemName

    我的密码。

    XDocument xd_Document = XDocument.Load(s_FileName);
    XElement xe_Element = (from xe in xd_Document.XPathSelectElements(s_Element)
                           where xe.Attribute(s_IdAttr).Value == s_Value
                           select xe).SingleOrDefault();
    XElement xe_NewElement = CloneElement(xe_Element)
    foreach(KeyValuePair<string, string> s in d_AttrValue)
        xe_NewElement.Attribute(s.Key).Value = d_AttrValue[s.Key];
    xe_Element.Parent.Add(xe_NewElement);
    xd_Document.Save(s_destFileName);
    

    我将以下参数传递给这个方法 字符串s_文件名、字符串s_文件名、字符串s_元素、字符串s_IdAttr、字符串s_值、字典d_属性值

    通过这段代码,我可以修改id和description属性。

    问题:如何使用值修改DefaultSystem属性systemName?

    注意:我有相同的代码用于修改现有元素,而不是创建新元素。我又遇到了同样的问题。最好是通用解决方案。

    1 回复  |  直到 16 年前
        1
  •  0
  •   Andy Lowry    16 年前
    xe_NewElement.Element("Systems")
        .Element("DefaultSystem")
        .Attribute("systemName")
        .Value = "Enter your value here";
    

    我相信你应该做你需要的。

    编辑:

    var attribute = ((IEnumerable)xe_NewElement.XPathEvaluate("Systems/DefaultSystem/@systemName"))
        .Cast<XAttribute>().FirstOrDefault();
    

    属性Value=“在此处输入您的值”;

    应该允许您通过传递XPath和值的列表来进行一般性修改。