【问题标题】:Modify Xml using XDocument/XPath C#使用 XDocument/XPath C# 修改 Xml
【发布时间】:2016-09-13 15:51:24
【问题描述】:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

所以只需删除它们。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      相关资源
      最近更新 更多