2017-05-09 51 views
0

以下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> 

在這裏,我只需要去除標籤,但我需要一個根標籤的子元素。

我的最終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。您可以刪除第一個''或最後一個''...並假定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 

所以,當你調用首先()你所要求的第一要素。 我認爲你需要再調用

firstChild.Elements() 

這應該然後包含的所有元素

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 –

相關問題