У меня есть XDocument и вам нужно удалить узел и снова добавить тот же узел после некоторых манипуляций (мой узел xelement является сложным и имеет внутренние узлы как Что ж). Кто-нибудь получил хороший способ сделать это, так как мой новый управляемый узел добавляется в самом конце xmldocument. Любые фрагменты кода будут с благодарностью оценены.Linq to XML - удалить узел и добавить новый узел в том же месте
ответ
Если вы только редактирование узла, то почему бы удалить его вообще? Просто получите ссылку на него в дереве и отредактируйте его на месте.
Если это не вариант по каким-то причинам, то один из способов это сделать это: как только вы нашли XElement
(или, в общем, XNode
), необходимо заменить в дереве, создать новый XElement
для использования в качестве замены, а затем использовать метод XNode.ReplaceWith
для старого элемента, передавая новый в качестве аргумента.
Если я правильно понимаю вас, это должно помочь вам это сделать.
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>
Код полностью отказывает в <Planet>
Mercury, добавляет дополнительный элемент к нему, удаляет его, и вновь вставляет его в конце <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"));
, который дает:
<?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>
Это просто опирается на приведенный выше пример @Ralph Lavelle. Я создал полное консольное приложение, чтобы я мог играть с кодом & понять его лучше. Понял, что я поделюсь им. Он использует тот же самый образец XML сверху, но мне пришлось удалить ссылки на Server.MapPath(), поскольку я не мог понять, как заставить их работать. Вы здесь:
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");
}
}
Возможно, это поможет другой LINQ noob, как я.
Оцените краткий рабочий пример. Найдено, что 'using System;' *** не требуется ***. Но что 'использование System.Xml; *** необходимо ***. – DavidRR
Вы очень желанны. Я ненавижу найти вопрос, который, как представляется, имеет ответ, который я ищу, и смутный код о том, как это сделать. Хорошая ошибка при использовании ошибки. – delliottg
- 1. Как добавить новый узел в существующий узел в XML
- 2. Редактировать файл XML (удалить узел и добавить новый)
- 3. Scala: Как добавить новый узел в файл XML и как удалить узел из XML-файл
- 4. XSLT - добавить новый узел, анализируя текстовый узел
- 5. Linq to XML - разобрать узел в словаре
- 6. Добавить новый узел в файл XML
- 7. XSLT - добавить новый текстовый узел анализирующая() узел
- 8. Как добавить новый узел в xml-файл
- 9. LINQ to XML, когда узел не существует
- 10. Вставьте узел новый XML с помощью LINQ
- 11. Добавить новый узел в XML-дерева
- 12. Добавить новый узел/столбец в xml/xslt
- 13. Как добавить новый узел в существующий XML
- 14. LINQ XML выберите узел
- 15. Как найти узел XML по пути в Linq-to-XML
- 16. Удалить узел xml -Xelement
- 17. добавить узел в узел XML dom4j
- 18. преобразование XSLT добавить новый узел
- 19. Как удалить узел XML?
- 20. XSLT добавить отсутствующий узел в определенном месте
- 21. JAXB добавить/удалить узел из существующего XML
- 22. Как удалить XML-узел?
- 23. Удалить XML-узел
- 24. Удалить дочерний узел XML
- 25. AS3 XML удалить узел
- 26. XSLT - удалить несколько узлов и добавить новый узел
- 27. Вставка XML-узел в определенном месте
- 28. Как добавить узел в определенном месте?
- 29. Ссылка на другой узел XML в том же документе
- 30. Xml удалить узел, элементы дорожат
+1: Nice 101 образец, чтобы люди начали –