簡體   English   中英

將XDocument.Root添加到另一個無法正常工作的XElement

[英]Add XDocument.Root to another XElement non working as expected

所以我正在做一些xml操作,但發現自己處在一種奇怪的情況下。 將具有null Parent的XElement添加到另一個XElement之后,我仍然將Parent設置為null。 因此,經過一些測試,我很喜歡這個問題,但是我不清楚自己的行為。

XDocument x=new XDocument(new XElement("asd"));
XElement root=x.Root;
XElement parent=new XElement("parent");
Console.WriteLine(root.Parent?.Name??"null"); //still null
parent.Add(root);
Console.WriteLine(root.Parent?.Name??"null"); //should be 
root.Remove(); // should throw InvalidOperationException
parent.Add(root);
Console.WriteLine(root.Parent?.Name??"null");//parent

看來,當您添加一個XElement作為XDocument的根時,該XElement將被復制,並且您需要在添加之前調用Remove。 該文檔說,當Parent為null時,Remove應該引發異常,但是在這種情況下,它似乎正在刪除XDocument及其根之間的關系。 這種插入是正確的還是有其他解釋?

關於XObject.Parent屬性和XNode.Remove()方法,“父”一詞的含義不同。

對於XObject.Parent屬性,它將返回XObject的父XElement。 因此,如果XObject的父級不是XElement類型,則它將返回null。 在您的示例中,“ asd”節點確實有一個父節點,但是由於它是XDocument類型而不是XElement類型,因此它返回null。

XNode.Remove方法從其父級移除XNode對象。 例如,它適用於從XNode繼承的任何類型。

    XElement node1 = new XElement("node1");
    XComment comment1 = new XComment("comment1");
    node1.Add(comment1);
    comment1.Remove();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM