如果不存在,则向xml文件添加新元素

时间:2014-08-20 18:36:33

标签: c# python

请帮助我!

我需要一个程序来检查XML是否包含一个specefic元素,如果没有则添加一个新元素。语言可以是C#或Python。

例如:

本程序应检查此XML是否包含Element" Name",否则创建它。

<Main>
  <Person>
    <name>Manfred</name>
    <Age>45</Age>
    <Position>Chef</Position>
  </Person>
  ...
  <person>
    <Age>45</Age>
    <Position>Chef</Position>
  </person>
</Main>

1 个答案:

答案 0 :(得分:1)

在C#(或任何其他.NET语言)上实现这一目标的最佳方法是使用linq2xml。这是一个非常简单的例子:

class Program
{
    private const string sample =
                         @"<Main>
                               <Person>
                               <Name>John Smith</Name>
                               <Age>25</Age>
                               <Position>Junior accountant</Position>
                           </Person>
                           <Person>
                               <Age>33</Age>
                               <Position>Consultant</Position>
                           </Person>
                           <Person>
                               <Name>Manfred</Name>
                               <Age>45</Age>
                               <Position>Manager</Position>
                            </Person>
                            <Person>
                                <Age>99</Age>
                                <Position>The Chairman</Position>
                            </Person>
                        </Main>";

    static void Main(string[] args)
    {
        var xml = XElement.Parse(sample);

        var noNamePersons = xml.Elements("Person")
                               .Where(e => !e.Elements("Name").Any());

        foreach (var person in noNamePersons)
        {
            person.Add(new XElement("Name", "A name should be placed here"));
        }

        Console.WriteLine(xml);
        Console.ReadLine();
    }
}

请注意,XML区分大小写。在上面的示例中,您使用了两种情况:&lt; Person&gt;和&lt; person&gt;。这些两种不同的情况,因此请确保您的输入XML是一致的。

如果需要从文件加载数据,可以使用XElement.Load(filename)方法。可以使用xmlObject.Save(filename)将处理结果保存到文件中。