Tôi có một XDocument và phải loại bỏ một nút và thêm nút rất giống lại sau một số thao tác (nút xelement của tôi phức tạp và có các nút bên trong tốt). Có ai có một cách tốt để làm điều này như nút thao tác mới của tôi đang được thêm vào cuối của xmldocument. Bất kỳ đoạn mã nào cũng sẽ được đánh giá cao.LINQ to XML - loại bỏ một nút và thêm một nút mới tại cùng một vị trí
Trả lời
Nếu bạn chỉ cần chỉnh sửa các nút, thì tại sao loại bỏ nó ở tất cả? Chỉ cần có một tham chiếu đến nó trong cây và chỉnh sửa nó tại chỗ.
Nếu đó không phải là một lựa chọn vì lý do nào đó, sau đó bạn đã tìm thấy XElement
(hoặc, nói chung, XNode
) bạn cần thay thế trong cây, tạo XElement
mới để phục vụ như một sự thay thế, và sau đó sử dụng phương thức XNode.ReplaceWith
trên phần tử cũ, chuyển giao phương thức mới làm đối số.
Nếu tôi hiểu bạn đúng, điều này sẽ giúp bạn làm điều đó.
SolarSystem.xml:
<?xml version="1.0" encoding="UTF-8"?>
<SolarSystem>
<Planets>
<Planet Id="1">
<Name>Mercury</Name>
</Planet>
<Planet Id="2">
<Name>Venus</Name>
</Planet>
<Planet Id="3">
<Name>Earth</Name>
</Planet>
</Planets>
</SolarSystem>
Mã tìm <Planet>
Mercury, thêm một yếu tố thêm vào nó, loại bỏ nó, và reinserts nó ở phần cuối của bộ sưu tập <Planets>
.
XDocument SolarSystem = XDocument.Load(Server.MapPath("SolarSystem.xml"));
IEnumerable<XElement> Planets = SolarSystem.Element("SolarSystem").Element("Planets").Elements("Planet");
// identify and change Mercury
XElement Mercury = Planets.Where(p => p.Attribute("Id").Value == "1").FirstOrDefault();
Mercury.Add(new XElement("YearLengthInDays", "88"));
// remove Mercury from current position, and add back in at the end
Mercury.Remove();
Planets.Last().AddAfterSelf(Mercury);
// save it as new file
SolarSystem.Save(Server.MapPath("NewSolarSystem.xml"));
mang đến cho:
<?xml version="1.0" encoding="UTF-8"?>
<SolarSystem>
<Planets>
<Planet Id="2">
<Name>Venus</Name>
</Planet>
<Planet Id="3">
<Name>Earth</Name>
</Planet>
<Planet Id="1">
<Name>Mercury</Name>
<YearLengthInDays>88</YearLengthInDays>
</Planet>
</Planets>
</SolarSystem>
Điều này chỉ được xây dựng trên ví dụ của @Ralph Lavelle ở trên. Tôi đã tạo ra một ứng dụng giao diện điều khiển hoàn chỉnh để tôi có thể chơi với mã & hiểu nó tốt hơn. Tôi đã chia sẻ nó. Nó sử dụng chính xác XML mẫu từ trên cao, nhưng tôi đã phải loại bỏ các tham chiếu đến Server.MapPath() vì tôi không thể tìm ra cách làm cho chúng hoạt động. Ở đây bạn đi:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
class LinqDemo
{
static void Main()
{
XDocument SolarSystem = XDocument.Load("SolarSystem.xml");
IEnumerable<XElement> Planets = SolarSystem.Element("SolarSystem").Element("Planets").Elements("Planet");
// identify and change Mercury
XElement Mercury = Planets.Where(p => p.Attribute("Id").Value == "1").FirstOrDefault();
Mercury.Add(new XElement("YearLengthInDays", "88"));
// remove Mercury from current position, and add back in at the end
Mercury.Remove();
Planets.Last().AddAfterSelf(Mercury);
// save it as new file
SolarSystem.Save("NewSolarSystem.xml");
}
}
Có lẽ điều này sẽ giúp một LINQ noob khác như tôi.
Đánh giá cao ví dụ làm việc ngắn gọn. Tìm thấy rằng 'using System;' là *** không phải ***. Nhưng rằng 'sử dụng System.Xml;' *** là *** bắt buộc. – DavidRR
Bạn đang khá hoan nghênh. Tôi ghét tìm một câu hỏi dường như có câu trả lời tôi đang tìm kiếm và mã mơ hồ về cách thực sự đi về nó. Tốt bắt gặp lỗi sử dụng. – delliottg
- 1. LINQ to XML - cập nhật/thay đổi các nút của một tài liệu XML
- 2. LINQ to XML - Tìm một phần tử
- 3. nút Loại bỏ từ một XmlDocument
- 4. C#, XML, thêm các nút mới
- 5. Thêm một dòng mới tại một vị trí cụ thể trong một tệp văn bản.
- 6. graphviz - vị trí nút cố định
- 7. làm thế nào để thêm/chèn nút có điều kiện vào XML sử dụng LINQ to XML
- 8. Thêm một Nút dừng ở vị trí tĩnh của Chế độ xem bản đồ
- 9. Chèn nút XML tại vị trí cụ thể của tài liệu hiện có
- 10. Thêm một Nút vào một DataFrid WPF
- 11. Kích hoạt một nút mẫu và nút xử lý cùng một lúc?
- 12. Nút vị trí trên iPhone
- 13. C#: Sửa đổi một nút xml
- 14. XSL: làm thế nào để sao chép một cây, nhưng loại bỏ một số nút?
- 15. Thêm một nút/thuộc tính vào một cây biểu hiện
- 16. SimpleXML cách thêm con vào một nút?
- 17. LINQ to XML: Cách hiệu quả nhất để di chuyển các nút lên và xuống
- 18. LINQ to XML chọn căn cứ nút trên giá trị thuộc tính
- 19. Cách nhanh nhất để thêm nút mới vào cuối xml?
- 20. Không giải nén một nút loại bỏ dữ liệu từ nút đó?
- 21. Excel: Vị trí nút cố định
- 22. LinearLayout của một WebView và một Nút
- 23. Thêm một cái nhìn vào một LinearLayout tại một vị trí xác định
- 24. cách Kiểm tra xem một phần tử con XML có tồn tại với LINQ to XML
- 25. Thêm một nút vào ActionBar với ActionBarSherlock
- 26. Một chương trình đơn giản cho giá trị nút và nút CRUD của tệp xml
- 27. Thêm nút mới vào đối tượng XmlDocument hiện tại
- 28. Thêm nút vào một Winforms DataGridView
- 29. Thêm một chú thích vào một nút Với SnakeYaml
- 30. Thêm một nút bên dưới một listview trên android
+1: Mẫu 101 đẹp để mọi người bắt đầu –