2016-09-13 3 views
0

xmlに関するXDocumentの可能性とxmlの変更方法が不思議です。のは、私は次のXMLを持っていると仮定しましょう:XDocument/XPathを使用してXmlを変更するC#

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

私はXDocumentまたはXPathの操作を使って、そこに(一番上にある)のみ1「ファーストネーム」ノードを残すことができますか?私はLINQで.Distinct()のような操作をしたい。私は私の結果のXMLは次のように見えるようにしたい:

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

が、これは任意の使用のでしょうか? http://stackoverflow.com/questions/1987470/xpath-to-get-unique-element-names –

+0

最初のファーストネームタグは常に1つのタグですか? –

+0

はい、firstnameタグは常に私が望むものです。 – Bill

答えて

2

ちょうどclient内のすべてのfirstNameの要素を検索し、すべてが、最初のを削除します。あなたはこのXPathクエリを使用して削除するにはfirstNameすべての要素を見つけることができます:

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

だからそれらを削除します。

doc.XPathSelectElements("//client/firstName[position() > 1]").Remove(); 
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); 
      } 
     } 
    } 
} 
関連する問題