Как динамически добавить элементы XML для XML-файлов, сохраняя тот же формат, используя LINQ для XML-файле с#
Всем Привет,
Я пытаюсь добавить элементы в xml, сохраняя тот же формат xml-элементов.
У меня есть эта модель, созданная в C#.
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] public class ProjectEnvironment { [XmlElement(ElementName = "ProjectId")] public int ProjectId { get; set; } [XmlElement(ElementName = "ProjectName")] public string ProjectName { get; set; } [XmlElement(ElementName = "ProjectApIUrl")] public string ProjectApIUrl { get; set; } [XmlElement(ElementName = "ProjectUrl")] public string ProjectUrl { get; set; } public List<Environment> Environments { get; set; } } public class Environment { [XmlElement(ElementName = "EnvId")] public string EnvId { get; set; } [XmlElement(ElementName = "EnvName")] public string EnvName { get; set; } }
У меня есть этот формат xml-файла, где мы можем использовать любое количество тегов среды в разделе среды
<ProjectEnvironment> <ProjectId>584</ProjectId> <ProjectName>ToolsProject</ProjectName> <ProjectApIUrl>https://testapi.example.com/api/v4/projects/584/deployments</ProjectApIUrl> <ProjectUrl>https://testapi.example.com/buyer/tools/Tools/API</ProjectUrl> <Environments> <Environment> <EnvId>3814</EnvId> <EnvName>SiT</EnvName> </Environment> <Environment> <EnvId>3786</EnvId> <EnvName>E1</EnvName> </Environment> <Environment> <EnvId>4038</EnvId> <EnvName>E2</EnvName> </Environment> <Environment> <EnvId>4039</EnvId> <EnvName>E3</EnvName> </Environment> <Environment> <EnvId>4040</EnvId> <EnvName>E4</EnvName> </Environment> <Environment> <EnvId>4041</EnvId> <EnvName>PERF</EnvName> </Environment> </Environments> </ProjectEnvironment>
Я добавил этот блок кода ниже в MVC API controller.
public void AddEnvironmentDetails() { XDocument _XDocument = XDocument.Load(@"C:\Content\test.xml"); _XDocument.Element("ProjectEnvironments").Add( new XElement("ProjectEnvironment", new XElement("ProjectId", "584"), new XElement("ProjectName", "PremierTools"), new XElement("ProjectApIUrl", "https://test.example.com/api/v4/projects/584/deployments"), new XElement("ProjectUrl", "https://test.exmple.com/Tools/API"), new XElement("Environments", new XElement("Environment", new XElement("EnvId", "3814"), new XElement("EnvName", "SiT") ), new XElement("Environment", new XElement("EnvId", "3786"), new XElement("EnvName", "E1") ), new XElement("Environment", new XElement("EnvId", "4038"), new XElement("EnvName", "E2") ), new XElement("Environment", new XElement("EnvId", "4039"), new XElement("EnvName", "E3") ), new XElement("Environment", new XElement("EnvId", "4040"), new XElement("EnvName", "E4") ), new XElement("Environment", new XElement("EnvId", "4041"), new XElement("EnvName", "PERF") ) ))); //var a = _XDocument.ToString(); _XDocument.Save(@"C:\Content\test.xml"); }
используя этот код, я могу добавлять элементы в том же формате, но хочу знать, как я могу сделать это динамически, если у меня есть больше сред для отображения с помощью foreach или for loop?
Может ли кто-нибудь помочь в достижении этого, это будет очень полезно.
Заранее спасибо
Что я уже пробовал:
Я попробовал в своем api контроллере использовать некоторую помощь по этой ссылке
Добавление элементов в xml - файл в C# - переполнение стека[^]