Как очистить старые значения из XML-файла в C#?
- Привет!
Я пытаюсь создать несколько XMl-файлов, но когда создается новый файл, также добавляются значения из предыдущего XML. Я хочу, чтобы новые значения добавлялись каждый раз при создании нового XML-файла.
Основной XML-код:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE repub SYSTEM "C:\repub\Repub_V1.dtd"> <?xml-stylesheet href="C:\repub\repub.xsl" type="text/xsl"?> <repub> <head> <title>xxx</title> </head> <body> <sec> <title>First Title</title> <break name="1-1"> <heading><page num="1"/>First Heading</heading> <bl>This is another text</bl> <p>This is a paragraph</p> </break> </sec> <sec> <title>Second Title</title> <break name="2-1"> <heading><page num="1"/>Second Heading</heading> <bl>This is another text</bl> <p>This is a paragraph</p> </break> </sec> <sec> <title>First Title</title> <break name="3-1"> <heading><page num="1"/>Third Heading</heading> <bl>This is another text</bl> <p>This is a paragraph</p> </break> </sec> <sec> <title>Third Title</title> <break name="4-1"> <heading><page num="1"/>Fourth Heading</heading> <bl>This is another text</bl> <p>This is a paragraph</p> </break> <break name="5-1"> <heading><page num="1"/>Fifth Heading</heading> <bl>This is another text</bl> <p>This is a paragraph</p> </break> </sec> </body> </repub>
Рассматривая это как мой XML, мой вывод должен быть:
section_01.xml -
<root>........ <division-id id="preview_1" class="sectionArticleBlockOdd1" /> <division-id id="preview_2" class="sectionArticleBlockOdd2" /> ......</root>
section_02.xml -
<root>........ <division-id id="preview_3" class="sectionArticleBlockOdd3" /> ......</root>
section_03.xml - <root>........ <division-id id="preview_4" class="sectionArticleBlockOdd4" /> <division-id id="preview_5" class="sectionArticleBlockOdd5" /> ......</root>
Что я получаю:
section_01.xml -
<root>........ <division-id id="preview_1" class="sectionArticleBlockOdd1" /> <division-id id="preview_2" class="sectionArticleBlockOdd2" /> ......</root>
section_02.xml -
<root>........ <division-id id="preview_1" class="sectionArticleBlockOdd1" /> <division-id id="preview_2" class="sectionArticleBlockOdd2" /> <division-id id="preview_3" class="sectionArticleBlockOdd3" /> ......</root>
section_03.xml -
<root>........ <division-id id="preview_1" class="sectionArticleBlockOdd1" /> <division-id id="preview_2" class="sectionArticleBlockOdd2" /> <division-id id="preview_3" class="sectionArticleBlockOdd3" /> <division-id id="preview_4" class="sectionArticleBlockOdd4" /> <division-id id="preview_5" class="sectionArticleBlockOdd5" /> ......</root>
Пожалуйста помочь.
Что я уже пробовал:
var sectionlist = xdoc.Descendants("sec").GroupBy(b => b.Element("title").Value).Select(b => b).ToList(); // xdoc is the main XML foreach (var uniquesections in sectionlist) { var sectionbreakcount = uniquesections.Descendants("break").ToList(); xsecdoc.Root.Element(ns + "head").Element(ns + "title").Value = ""; //xsecdoc is the output XML that will be created for every section found xsecdoc.Root.Element(ns + "head").Element(ns + "title").Add(uniquesections.Key); xsecdoc.Root.Element(ns + "body").Descendants().FirstOrDefault(el => (string)el.Attribute("class") == "sectionName").Value = ""; xsecdoc.Root.Element(ns + "body").Descendants().FirstOrDefault(el => (string)el.Attribute("class") == "sectionName").Add(uniquesections.Key); foreach(var article in sectionbreakcount) { articlecount++; xsecdoc.Root.Element(ns + "body").Add(new XElement(ns + "division-id", new XAttribute("id", "preview_" + articlecount, new XAttribute("class", "sectionArticleBlockOdd" + articlecount))); } File.WriteAllText(opsFolder + "\\" + "section_0" + (sectionloopcount++) + ".xml", XmlEncode(xsecdoc)); }
Richard Deeming
File.WriteAllText(opsFolder + "\\" + "section_0" + (sectionloopcount++) + ".xml", XmlEncode(xsecdoc));
Нет необходимости писать свой собственный метод для сохранения
XDocument
в файл. Просто использовать то Save
метод[^]:xsecdoc.Save(opsFolder + "\\" + "section_0" + (sectionloopcount++) + ".xml");