Xóa node trong file Xml bằng c# (System.Xml.Linq)

Chào các bác ạ.
Em có 1 file XML đại khái như thế này:
Chào các bác ạ.
Em có 1 file XML đại khái như thế này:

<Root>
    <Child>
        <GrandChild1/>
        <GrandChild2/>
        <GrandChild3/>
    </Child>
    <Child>
        <GrandChild4/>
        <GrandChild5/>
        <GrandChild6/>
    </Child>
    <Child>
        <GrandChild7/>
        <GrandChild8/>
        <GrandChild9/>
    </Child>
</Root>

Bây giờ em muốn làm 1 đoạn code c# để xóa cái node Child cuối cùng, để kết quả được như thế này:

<Root>
    <Child>
        <GrandChild1/>
        <GrandChild2/>
        <GrandChild3/>
    </Child>
    <Child>
        <GrandChild4/>
        <GrandChild5/>
        <GrandChild6/>
    </Child>
</Root>

Em thử dùng XElement.RemoveAll() thì chỉ xóa được các node GrandChild(7,8,9), còn node Child thì vẫn ở đó. Còn lệnh XElement.Remove() thì em dùng kiểu gì cũng không được (không xóa được gì luôn).
Các bác có thể gợi ý giúp em một đoạn code ví dụ nho nhỏ được không ạ?
Em cảm ơn nhiều

Nội dung dạng văn bản thì không nên chụp hình, chỉ cần sao chépdán là được.

Phương thức XElement.Remove() là để loại bỏ nút đó khỏi nút cha, đúng ý bạn rồi. Nhưng sao lại không có tác dụng?

2 Likes

Lúc nãy em copy nội dung file xml (như hình), thì lúc post bài phần đó không hiển thị, có vẻ như là text nằm giữa 2 dấu <> thì không hiện hay sao ấy ạ. Mà em không biết chỉnh kiểu gì nên chụp cho nhanh.
Về phần code, có vẻ như em vừa tìm được cách sửa rồi.
Lúc đầu thì em dùng code đại khái như thế này:

var these=root.Descendants("Child");
foreach (var elem in these)
{
      if(.....)
          {
                     elem.Remove();
          }
}

Code trên báo lỗi Null object (nếu là elem.RemoveAll() thì lại không lỗi).
Để sửa thì trong vòng lặp foreach ở trên, thay vì xóa element thì chỉ nhớ thứ tự của element cần xóa, rồi hết foreach dùng these.ElementAt(...).Remove() là được.
Cảm ơn bác đã reply ạ.

Nếu bạn muốn xóa phần tử cuối thì có thể dùng thuộc tính XElement.LastNode để xóa cho dễ dàng hơn.
Còn khoản bị NullObjectReferenceException do thuộc tính Parent của nút hiện tại đang = null, chưa rõ lý do.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?