我想知道关于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>
答案 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);
}
}
}
}