使用XDocument/XPath c#修改Xml

本文关键字:修改 Xml XPath XDocument 使用 | 更新日期: 2023-09-27 18:06:54

我想知道XDocument与xml的关系以及它如何修改xml。假设我有下一个xml:

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

我可以通过使用XDocument或XPath操作只留下一个"firstname"节点(在最顶部)吗?我想做一些类似。distinct()操作在LINQ中所做的事情。我想让我的结果xml看起来像这样:

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

使用XDocument/XPath c#修改Xml

只需在client中搜索所有firstName元素并删除除第一个元素外的所有元素。您可以使用以下xpath查询找到要删除的所有firstName元素:

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

所以把它们去掉。

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

使用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);
            }
        }
    }
}