Сохранение дочерних узлов Linq в XML - PullRequest
0 голосов
/ 19 августа 2009

Это настоящий вопрос новичка, но я изо всех сил пытаюсь заставить это работать. Я пытаюсь сохранить некоторые данные в файл XML, но я не могу понять, синтаксис необходимо разместить элементы в правильном месте.

Я бы хотел сохранить дерево XML, которое я построил в соответствующих разделах, на основе связи между заводом и компанией. Код как всегда добавляет данные в первый раздел. Я чувствую, что мне нужно некоторое время, когда предложение where в _xmlEntity.Element ("Company"). Element ("Plants"). Добавить раздел кода, но я не достаточно хорошо понимаю linq прямо сейчас, чтобы заставить его работать.

Не стесняйтесь комментировать любые другие проблемы, которые вы можете увидеть с этим кодом, поскольку я все еще учусь.

Это моя (уменьшенная) структура xml.

<?xml version="1.0" encoding="utf-8"?>
<Entities>
  <Company>
   <Name>Company A</Name>
   <Phone>(555) 516-5165</Phone>
   <Plants>
     <Plant>
       <Name>Plant A</Name>
       <EfficiencyRate>92</EfficiencyRate>
     </Plant>
     <Plant>
       <Name>Plant B</Name>
       <EfficiencyRate>92</EfficiencyRate>
     </Plant>
   </Plants>
  </Company>
  <Company>
    <Name>Test Company</Name>
    <Phone>(555) 123-1234</Phone>
   <Plants />
  </Company>
</Entities>

Я использую этот код для создания xml и добавления его в структуру.

 //Method to save plant information to XML file
    public bool SavePlant(Plant plantData)
    {
        DataAcccess _newDataAccess = new DataAcccess();
        XElement _xmlEntity = _newDataAccess.LoadXMLFile("EntityData");

        //Validation code removed to make example smaller...

        //Create xml tree for new plant entry
        _xmlEntity.Element("Company").Element("Plants").Add(new XElement("Plant",
            new XElement("Name", plantData.Name),
            new XElement("Address", plantData.Address),
            new XElement("City", plantData.City),
            new XElement("State", plantData.State),
            new XElement("Zip", plantData.Zip),
            new XElement("Phone", plantData.Phone),
            new XElement("WorkDays", plantData.WorkDays),
            new XElement("WorkHours", plantData.WorkHours),
            new XElement("EfficiencyRate", plantData.EfficiencyRate)));

        //Save the tree in the EntityData.xml file and return a bool for the results
        return _newDataAccess.SaveXMLData("EntityData", _xmlEntity);
    } 

1 Ответ

1 голос
/ 19 августа 2009

Ну, я смог заставить это работать, поэтому я решил опубликовать код, который я использовал. К сожалению, я не уверен, почему это работает, я просто слепо наткнулся на него, пока он не работает так, как я ожидал. Я бы с удовольствием принял другие предложения или даже объяснение того, почему это работает. Что я не понимаю, так это то, как переменная _xmlEntity всегда обновляется с результатами _xmlPlantData. Я чувствую себя довольно глупо, когда пишу код, который не понимаю.

 public bool SavePlant(Plant plantData)
    {
        DataAcccess _newDataAccess = new DataAcccess();
        XElement _xmlEntity = _newDataAccess.LoadXMLFile("EntityData");

        //Validation code removed to make example easier to follow.

        XElement _xmlPlantData = new XElement ("Plant",
            new XElement("Name", plantData.Name),
            new XElement("Address", plantData.Address),
            new XElement("City", plantData.City),
            new XElement("State", plantData.State),
            new XElement("Zip", plantData.Zip),
            new XElement("Phone", plantData.Phone),
            new XElement("WorkDays", plantData.WorkDays),
            new XElement("WorkHours", plantData.WorkHours),
            new XElement("EfficiencyRate", plantData.EfficiencyRate));


        XElement _xmlTemp = _xmlEntity.Descendants("Company").First(el => (string)el.Element("Name").Value == plantData.ParentCompany);
        _xmlTemp.Element("Plants").Add(_xmlPlantData);

        //Save the tree in the EntityData.xml file and return a bool for the results
        return _newDataAccess.SaveXMLData("EntityData", _xmlEntity);
    } 

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...