2017-05-09 3 views
0

次のXMLはです。入力はです。2番目のルート要素だけを削除する方法ですが、その子が必要です

<units> 
    <author-group> 
    <root> 
     <author Seq="1"> 
     <initials>J.</initials> 
     <surname>Kim</surname> 
     <given-name>Jiyeon</given-name> 
     </author> 
     <author Seq="2"> 
     <initials>k.</initials> 
     <surname>Kim</surname> 
     <given-name>ki</given-name> 
     </author> 
    </root> 
    </author-group> 
</units> 

ここでタグを削除する必要がありますが、そのルートタグの子要素が必要です。

私の最終的なxmlは、次のようなxmlです。

<units> 
    <author-group> 
    <author Seq="1"> 
     <initials>J.</initials> 
     <surname>Kim</surname> 
     <given-name>Jiyeon</given-name> 
    </author> 
    <author Seq="2"> 
     <initials>k.</initials> 
     <surname>Kim</surname> 
     <given-name>ki</given-name> 
    </author> 
    </author-group> 
</units> 

そのために私は以下の質問をしました。 How to Remove Root Element in C#

と私は以下のようなコードを試しました。

XDocument document = new XDocument(author);      
XElement firstChild = document.Root.Elements().First(); 
XDocument output = new XDocument(firstChild); 

しかし、そのルート要素は削除されませんでした。ルート要素のみを削除する別の方法がありますか?子要素を削除せずに

+3

最終的なXMLが有効なXMLではありませんが含まれている必要があり

firstChild.Elements() 

をコールする必要があると思います。最初の ''または最後の ''を削除して、xmlが完全ではないとみなしてください。 – tafia

+0

要素「」の名前を付けるだけで、ルートにはなりません。続きを読む[ここ](https://www.w3schools.com/xml/xml_syntax.asp) – FortyTwo

+0

はい削除されたルートの後に私はその著者グループ要素の別のルートを追加します – Malathi

答えて

0
あなたのサンプルコードで

document.Root // this will point at the <author-group> element 

Elements() // this will point at the <root> element 

だから、あなたが最初の要素を求めている()最初に呼び出したとき。 私はあなたがして。これは、その後のすべての要素

1
const string xml = @"<units> 
       <author-group> 
       <root> 
        <author Seq=""1""> 
        <initials>J.</initials> 
        <surname>Kim</surname> 
        <given-name>Jiyeon</given-name> 
        </author> 
        <author Seq=""2""> 
        <initials>k.</initials> 
        <surname>Kim</surname> 
        <given-name>ki</given-name> 
        </author> 
       </root> 
       </author-group> 
      </units>"; 

const string elementToRemove = "root"; 
const string addElementsInElement = "author-group"; 

var doc = XDocument.Parse(xml); 

var matchingElement = doc 
         .Descendants() 
         .First(e => e.Element(elementToRemove) != null); 

var innerElements = matchingElement.Elements().Elements().ToList(); 

doc 
    .Descendants() 
    .First(e => e.Element(elementToRemove) != null) 
    .RemoveNodes(); 

doc 
    .Descendants() 
    .First(e => e.Element(addElementsInElement) != null) 
    .Element(addElementsInElement) 
    .Add(innerElements); 
+0

私はシーケンスに一致する要素の例外が含まれていません – Malathi

+0

もう一度、私は例外がありません。多分あなたはいくつかの値を変更するでしょうか?どのようにしてこの.csファイルをしてください:https://drive.google.com/file/d/0B_Bt3nG4vreTWl9VVlBxQjZESUk/view?usp=sharing –

関連する問題