【问题标题】:How to update node values in XML using C#如何使用 C# 更新 XML 中的节点值
【发布时间】:2017-01-09 20:54:57
【问题描述】:

我必须用修改后的值更新原始 XML 文件。以下是我的示例 XML 文件:

<request>
<facility>
<alternateIDs>
            <alternateID code="ALT8">11111111</alternateID>
            <alternateID code="ALT12">111111111</alternateID>
            <alternateID code="ALT">1111111111</alternateID>
            <alternateID code="ALT1">11111111</alternateID>
            <alternateID code="ALT9">11111111</alternateID>
            <alternateID code="ALT3">111111111</alternateID>
</alternateIDs>
</facility>
</request>

现在我要查找alternateID code="ALT" 并将其值更改为00000000。我的最终文件应如下所示:

<request>
<facility>
<alternateIDs>
            <alternateID code="ALT8">11111111</alternateID>
            <alternateID code="ALT12">111111111</alternateID>
            <alternateID code="ALT">00000000</alternateID>
            <alternateID code="ALT1">11111111</alternateID>
            <alternateID code="ALT9">11111111</alternateID>
            <alternateID code="ALT3">111111111</alternateID>
</alternateIDs>
</facility>
</request>

如何使用XElementXAttributes 实现此目的?我不熟悉 XML 和 C#。任何帮助表示赞赏!

【问题讨论】:

    标签: c# xml visual-studio-2008 ssis


    【解决方案1】:

    知道了!

    public static void ReplaceCode()
         {
            var root = new XmlDocument();
             root.Load(@"C:\data.xml");
    
            foreach (XmlNode e in root.GetElementsByTagName("alternateID"))
            {
                if (e.Attributes["code"].Value.Equals("ALT"))
                {
                    e.FirstChild.Value = "00000000"; // FirstChild because the inner node is actually the inner text, yeah XmlNode is weird.
                    break;
                }
            }
            root.Save(@"C:\data.xml");
        }
    

    问我任何关于它的事情,我可以澄清。 :)

    【讨论】:

    • 非常感谢……我明白了!! :-).. 唯一的事情是一旦值设置为 0000000,我想退出循环。但是在这里打断,实际上将控制权带到脚本的最后一行,而不是循环之后的直接行。
    • 太棒了!很高兴我能帮上忙。如果您认为这很好,您应该将其付款并为答案 +1,以便其他人可以看到。 :) 我刚刚遇到了同样的问题,所以我只需要回应。哈哈哈
    • 左侧的箭头。干杯。
    • 谢谢!!我做到了..不知何故无法保存文件中的更改..当我在调试模式下检查根变量时,值仍然没有更新
    • 检查文件位置,您的系统是否有权编辑那里的文件?也是服务吗?那肯定会搞砸的。我也知道如何解决这个问题
    【解决方案2】:

    试试这个:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Linq;
    
    namespace ConsoleApplication34
    {
        class Program
        {
            const string FILENAME = @"c:\temp\test.xml";
            static void Main(string[] args)
            {
                XDocument doc = XDocument.Load(FILENAME);
    
                XElement alt = doc.Descendants("alternateID").Where(x => (string)x.Attribute("code") == "ALT").FirstOrDefault();
                alt.Value = "00000000";
    
            }
    
    
        }
    
    
    }
    

    【讨论】:

    • 我无法使用 linq XML。我正在尝试使用 XMLdocument、XML 元素,但我遗漏了一些东西..
    【解决方案3】:

    这是一种非 Linq 的做法,但如果您知道如何阅读,则 linq 会更简洁。

    public static void ReplaceCode()
         {
            var root = XElement.Load(@"C:\data.xml");
            foreach (var e in root.Descendants("alternateID"))
            {
                if (!e.Attribute("code").Value.Equals("ALT")) continue;
                e.Value = "00000000";
                break;
            }
            root.Save(@"C:\data.xml");
        }
    

    【讨论】:

    • 对我来说,Xelement、Xdocument 被禁用,我只能使用 XMLelement、XMLDocument 等。
    • 没问题,我刚刚发布的第二个答案解决了这个问题。我保持这个答案是为了其他人的利益。它与 jdwengs sweet linq 声明非常吻合。
    猜你喜欢
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多