2013-10-09 28 views
0

У меня проблема с добавлением узла в существующий xml. Я не уверен, что узел является правильным именем. Если это не может кто-то поправить меня, пожалуйста. Это намного больше, но этот пример должен сделать трюк.Как добавить новый узел в xml-файл

Вот как выглядит XML-файл.

<?xml version="1.0" encoding="utf-8"?> 
<MovieData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Movie> 
     <Name>Death Race</Name> 
     <Type>Action</Type> 
     <Type>Adventure</Type> 
     <Rating>R</Rating> 
     <Disk>Blu-Ray</Disk> 
    </Movie> 
    <Movie> 
     <Name>Death Race 2</Name> 
     <Type>Action</Type> 
     <Type>Adventure</Type> 
     <Rating>R</Rating> 
     <Disk>Blu-Ray</Disk> 
    </Movie> 
</MovieData> 

Теперь я хочу, чтобы это закончилось так.

<?xml version="1.0" encoding="utf-8"?> 
<MovieData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Movie> 
     <Name>Death Race</Name> 
     <Type>Action</Type> 
     <Type>Adventure</Type> 
     <Rating>R</Rating> 
     <Disk>Blu-Ray</Disk> 
     <Time>time</Time> 
    </Movie> 
    <Movie> 
     <Name>Death Race 2</Name> 
     <Type>Action</Type> 
     <Type>Adventure</Type> 
     <Rating>R</Rating> 
     <Disk>Blu-Ray</Disk> 
     <Time>time</Time> 
    </Movie> 
</MovieData> 

Это то, что у меня есть. Я хочу иметь возможность добавить временный узел и значение в код ниже.

XmlDocument doc = new XmlDocument(); 
doc.Load(movieListXML); 
XmlNode node = doc.SelectSingleNode("/MovieData"); 
foreach (XmlNode movie in node.SelectNodes("Movie")) 
{ 
    if (movie != null) 
    { 
     // Do stuff here. 
     // I'm not sure what to do here. 
    } 
} 

Это также не работает.

XmlDocument doc = new XmlDocument(); 
doc.Load(movieListXML); 
XmlNode node = doc.SelectSingleNode("/MovieData"); 
foreach (XmlNode movie in node.SelectNodes("Movie")) 
{ 
    if (movie != null) 
    { 
     // Do stuff here. 
     // I'm not sure what to do here. 
     using(XmlWriter writer = node.CreateNavigator().AppendChild()) 
     { 
      writer.WriteStartElement("SeriesType", movieListXML); 
      writer.WriteElementString("Time", movieListXML, "time"); 
      writer.WriteEndElement(); 
     } 
    } 
} 
+0

Я думаю, что этот вопрос просто ответил [здесь] (http://stackoverflow.com/questions/14798854/c-xml-adding-new-nodes) – Tinwor

+0

Посмотрите выше см., что я пробовал, он все еще не работает. – deathismyfriend

ответ

1

Я обычно использую XDocument Linq, чтобы иметь дело с XML. Вам нужно будет добавить System.Xml.Linq к вашим операциям using. Было бы что-то вроде:

 string movieListXML = @"c:\test\movies.xml"; 
     XDocument doc = XDocument.Load(movieListXML); 
     foreach (XElement movie in doc.Root.Descendants("Movie")) 
     { 
      movie.Add(new XElement("Time", "theTime")); 
     } 
     doc.Save(movieListXML); 
+0

Это работает благодаря большому бутону. Извините за поздний ответ. – deathismyfriend

0
XmlDocument doc = new XmlDocument(); 
doc.Load(movieListXML); 
XmlNode node = doc.SelectSingleNode("/MovieData"); 
foreach (XmlNode movie in node.SelectNodes("Movie")) 
{ 
    if (movie != null) 
    { 
     XmlElement elem = doc.CreateElement("Time"); 
     elem.InnerText = "time"; 
     movie.AppendChild(elem); 
    } 
} 
doc.Save(movieListXML); 
+0

ничего не произошло. Я не получил ошибку и ничего не добавил в файл. – deathismyfriend

+0

Возможно, вы забыли добавить строку movieListXML = @ "c: \ test \ movies.xml"; – Nikita

+0

Нет, я не уверен, что случилось, но я получил его для работы с ответом выше. Спасибо за вашу помощь. – deathismyfriend

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