2011-12-08 9 views
5

Dziękuję bardzo z górypróbuje pisać do istniejącego pliku XML dla C#

Jest to oryginalna XML File

<my:Incident> 
     <my:Category>This is for Category</my:Category> 
       <my:Status>`Status is Close`</my:Status> 
     <my:Description>`This is the description part</my:Description> 
</my:Incident> 

i chciałbym dodać inne pola pod my:Incident

Oto przykład:

<my:Incident> 
     <my:Category>This is for Category</my:Category> 
       <my:Status>`Status is Close`</my:Status> 
     <my:SummaryDescription>This is the summary</my:SummaryDescription> 
     <my:Description>`This is the description part</my:Description> 
</my:Incident> 

Próbowałem wprowadzić, ale dostałem s komunikat o błędzie:

Znak ":", wartość szesnastkowa 0x3A, nie może być zawarty w nazwie.

public void writerXMLTest(string fileName) 
     { 

      if (!File.Exists(fileName)) 
      { 
       XmlTextWriter writer = new XmlTextWriter(fileName, null); 
       writer.WriteStartElement("my:Incident"); 
       writer.WriteEndElement(); 
       writer.Close(); 
      } 

      XDocument doc = XDocument.Load(fileName); 
      XElement demoNode = new XElement("my:Incident"); 
      demoNode.Add(new XElement("my:SummaryDescription", "Test Test")); 


      Console.WriteLine("I write it!!!!!"); 
     } 

Będę wdzięczny jeśli ktoś może kierować mi gdzie zrobiłem źle w moim kodu.


Ja trochę zmodyfikowałem kod. Ale teraz nie jestem w stanie napisać go do istniejącego pliku XML

To jest mój kod:

public void writerXMLTest(string fileName) 
     { 

      if (!File.Exists(fileName)) 
      { 
       XmlTextWriter writer = new XmlTextWriter(fileName, null); 
       writer.WriteStartElement("Incident", "my"); 
       writer.WriteEndElement(); 
       writer.Close(); 
      } 

      XDocument doc = XDocument.Load(fileName); 
      XElement demoNode = new XElement("SummaryDescription", "Test Test"); 


      Console.WriteLine("I write it!!!!!"); 
     } 

Odpowiedz

2

Istnieje kilka problemów tutaj. Najpierw twój "oryginalny XML" jest nieprawidłowy, ponieważ nie zdefiniowałeś "mojej" przestrzeni nazw. Albo nie pokazałeś nam całego pliku XML, albo ręcznie kodujesz nieprawidłowy XML. Nie rób tego.

Nie mogę zapisać tego pliku do istniejącego pliku XML.

Co oznacza "Nie mogę"? Zgłasza wyjątek? Czym jest wyjątek? Czy masz na myśli, że twój plik pozostaje niezmieniony po uruchomieniu kodu? Nie jest to zaskakujące, ponieważ twój kod właściwie nic nie robi.

XDocument doc = XDocument.Load(fileName); 

To ładuje plik XML z dysku ... a następnie nic z nim nie robi. Nie zmienia pliku.

XElement demoNode = new XElement("SummaryDescription", "Test Test"); 

Tworzy nowy element XML, całkowicie niezwiązane z doc, oryginalny plik lub cokolwiek innego ... a potem wyrzuca go z dala, nie robiąc nic z tego. Nie dodałeś go nigdzie ani nie zapisałeś niczego w pliku.

i chciałbym dodać inne pola pod moim: Incident

Jeśli chcesz dodać demoNode do pliku, najpierw musi znaleźć Incident węzła:

XElement e = doc.Descendants(XName.Get("Incident", nameSpace)).FirstOrDefault<XElement>(); 

Dodaj Twój nowy element:

if (e != null) 
{ 
    e.Add(new XElement(XName.Get("SummaryDescription", nameSpace), "Test Test")); 
} 

Następnie zapisz zmieniony dokument

doc.Save(fileName); 
+0

Dziękuję za pomoc. Rozwiązałeś to. :-) – yyc2001

5

Tak jest źle:

writer.WriteStartElement("my:Incident"); 

To prawda:

writer.WriteStartElement("Incident", "blablablaSpace:my"); 

Edytuj:

writer.WriteStartElement("Incident", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2005-09-22T20:42:56:my"); 
+0

Naprawię błąd, ale teraz nie jestem w stanie zapisać go w istniejącym pliku XML – yyc2001

+0

@ yyc2001 Co to oznacza? Mam nadzieję, że nie użyłeś tego, co napisałem dosłownie :) – FailedDev

+0

@FailedDec Naprawdę nie zmodyfikowałem swojego posta, aby pokazać mój kod aktualizacji. – yyc2001

1

Twój prefiks "my:" jest przestrzenią nazw. Musisz użyć TagName = "Incident", Namespace = "my".

Powiązane problemy