使用XDocument / XPath C#修改Xml

时间:2016-09-13 15:51:24

标签: c# xml xpath linq-to-xml

我想知道关于xml的XDocument可能性以及它如何修改xml。我们假设我有下一个xml:

    <client>
        <firstName>Ian</firstName>
        <firstName>Charles</firstName>
        <city>LosAngeles</city>
        <state>California</state>
    </client>

我可以通过使用XDocument或XPath操作只留下一个“firstname”节点(位于最顶层)吗?我想在LINQ中执行类似.Distinct()操作的操作。我想让我生成的xml看起来像这样:

   <client>
       <firstName>Ian</firstName>
       <city>LosAngeles</city>
       <state>California</state>
   </client>

2 个答案:

答案 0 :(得分:2)

只需搜索firstName中的所有client元素,然后删除除第一个之外的所有元素。您可以使用此xpath查询找到要删除的所有firstName元素:

//client/firstName[position() > 1]

所以只需删除它们。

doc.XPathSelectElements("//client/firstName[position() > 1]").Remove();

答案 1 :(得分:1)

使用xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            foreach(XElement client in doc.Descendants("client"))
            {
                List<XElement> firstNames = client.Elements("firstName").ToList();
                XElement newFirstName = new XElement(firstNames.FirstOrDefault());
                firstNames.Remove();
                client.AddFirst(newFirstName);
            }
        }
    }
}