2015-07-03 5 views
2

Goodday,Нерегулярное сочинительства в XML с XDocument

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

Additional information: This operation would create an incorrectly structured document.

На:

doc.Add(new XElement(UserLevel, new XElement(CommandName.Remove(0, 1), CommandInfo))); 

Это полная функция:

private bool SetCommands(string CommandName, string CommandInfo, string UserLevel) 
{ 
    if (GetCommand(CommandName) == "none") 
    { 
     XDocument doc = new XDocument(); 

     if (File.Exists(XmlFileLocation)) 
      doc = XDocument.Load(XmlFileLocation); 

     doc.Add(new XElement(UserLevel, new XElement(CommandName.Remove(0, 1), CommandInfo))); 
     doc.Save(XmlFileLocation); 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

То, что я хочу, чтобы иметь возможность записывать в файл под тот же UserLevel с разными CommandNames, которые затем содержат разные CommandInfos. Позже я планирую иметь возможность редактировать CommandInfo, поэтому мне придется перезаписать написанное.

Кто-нибудь знает, что я ищу? Как я понятия не имею, сам ...

Спасибо за чтение, Farcrada

ответ

2

XML-документ может иметь только один корневой элемент, и вы, кажется, пытаются добавить больше чем один. Просто создайте элемент верхнего уровня, скажем Users, и добавьте UserLevel в качестве своих детей.

Что-то вроде этого:

private bool SetCommands(string CommandName, string CommandInfo, string UserLevel) 
{ 
    if (GetCommand(CommandName) == "none") 
    { 
     XDocument doc = new XDocument(); 

     if (File.Exists(XmlFileLocation)) 
      doc = XDocument.Load(XmlFileLocation); 

     var users = doc.Root.Element("Users"); 
     if (users == null) 
     { 
      users = new XElement("Users"); 
      doc.Add(users); 
     } 

     users.Add(new XElement(UserLevel, new XElement(CommandName.Remove(0, 1), CommandInfo))); 
     doc.Save(XmlFileLocation); 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 
+0

Он работал, и спасибо за предложение, но непрерывно экономия дал ту же самую ошибку. Но не на том же месте. Он получает его сейчас, когда он хочет выполнить 'doc.save (XMLFileLocation);'. Какие-либо предложения? – Farcrada

Смежные вопросы