2013-09-21 3 views
2

вот xml-файл, который я хочу получить. он содержит сведения о стихийных бедствиях номер 01,02,03 и далее. катастрофы идентифицируются по идентификатору бедствия.Как добавить к существующему файлу xml как набор атрибутов

<?xml version="1.0" encoding="utf-8" ?> 
<disasters> 
    <disaster ID="001" 
     disaterType="Flood" 
     location="Matara" 
     date="20-01-2012" 
     noOfVictims="245"> 
     <victims> 
      <victim type="adult" 
       gender="male" 
       amount="46" 
       /> 
     <victim type="children" 
      gender="female" 
      amount="460"/> 
     </victims> 
      <requiredItems> 
      <requiredItem type="Food" 
        itemName="Rice" 
        description="null" 
        quantity="367"/> 
      <requiredItem type="Stationary" 
        itemName="Pens" 
        description="null" 
        quantity="87"/> 
      </requiredItems> 
    </disaster> 
    <disaster ID="002" // This is a separate disaster detail list 
    disaterType="Tsunami" 
    location="Galle" 
    date="10-05-2009" 
    noOfVictims="845"> 
     <victims> 
      <victim type="children" 
       gender="male" 
       amount="46" 
       /> 
      <victim type="children" 
       gender="female" 
       amount="460"/> 
     </victims> 
     <requiredItems> 
      <requiredItem type="Clothes" 
       itemName="Tshirts" 
       description="male" 
       quantity="67"/> 
      <requiredItem type="Food" 
       itemName="bread" 
       description="null" 
       quantity="37"/> 
     </requiredItems> 
    </disaster> // end of the second list of disaster details 
</disasters> 

вот мой код. но это только добавляет новый идентификатор бедствия. Остальные детали добавляются неправильно. код ** будет добавлен к первому идентификатору бедствия, но я хочу добавить их во вторую катастрофу и определить их как новую катастрофу. Заранее благодарен

 if (System.IO.File.Exists(path)) 
     { 
     XmlDocument xDoc = new XmlDocument(); 
      xDoc.Load("C:\\4 ITP la laaa\\me doing\\disasters.xml"); 
      XmlNode xNode = xDoc.CreateNode(XmlNodeType.Element, "disaster", ""); 
      XmlAttribute id = xDoc.CreateAttribute("ID"); 
      XmlAttribute disaterType = xDoc.CreateAttribute("value"); 
      XmlAttribute location = xDoc.CreateAttribute("value1"); 
      XmlAttribute date = xDoc.CreateAttribute("value2"); 
      XmlAttribute noOfVictims = xDoc.CreateAttribute("value3"); 
      id.Value = "001"; 
      disaterType.Value = "Flood"; 
      date.Value = " value1"; 
      noOfVictims.Value = "date"; 
      xNode.Attributes.Append(id); 
      xNode.Attributes.Append(disaterType); 
      -- 
      -- 

      XmlNode xNode1 = xDoc.CreateNode(XmlNodeType.Element, "victims", ""); 
      XmlAttribute type = xDoc.CreateAttribute("type"); 

      type.Value = "adult"; 
      gender.Value = "male"; 
      value.Value = "46"; 
      -- 
      -- 
      xDoc.GetElementsByTagName("disasters")[0].InsertAfter(xNode,  xDoc.GetElementsByTagName("disasters")[0].LastChild); 
      **xDoc.GetElementsByTagName("victims")[0].InsertAfter(xNode1, xDoc.GetElementsByTagName("victims")[0].LastChild);** 

      xDoc.Save("C:\\4 ITP la laaa\\me doing\\disasters.xml"); 
      Label1.Text=("Apended"); 
+0

Вы должны использовать XmlDocument? Это намного проще и понятнее с XDoucment. –

+0

Не могли бы вы помочь мне в этом вопросе. Я хочу добавить отдельные детали стихийных бедствий к существующим деталям бедствия. Спасибо – Priyankara

ответ

0

Ваш код кажется слишком сложным. Я только установил **.

xDoc.GetElementsByTagName("disasters")[0].InsertAfter(xNode, 
    xDoc.GetElementsByTagName("disasters")[0].LastChild); 

//xDoc.GetElementsByTagName("victims")[0].InsertAfter(xNode1, 
//  xDoc.GetElementsByTagName("victims")[0].LastChild); 
xNode.AppendChild(xNode1); // <visitors> is simply a direct child of <disaster> 

Предпочтительным способом с using System.Xml.Linq;

XDocument xDoc = XDocument.Load("ExistingFile.xml"); 

XElement newDisaster = new XElement("disaster", 
     new XAttribute("ID", 2), 
     new XAttribute("location", "Galle"), 
     ... 
     new XElement("victims", 
      new XElement("victim", 
       new XAttribute("type", "children"), 
       ... 
     ))); 

xDoc.Element("disasters").Add(newDisaster); 
xDoc.Save("SomeFileName.xml"); 
+0

здесь я хочу добавить тег после тега бедствия. то я хочу добавить в него тег и добавить к нему атрибуты. не могли бы вы рассказать мне, как добавить тег после идентификатора бедствия. Спасибо – Priyankara

+0

Я думаю, вы имеете в виду «жертву тега _inside_ тега катастрофы». Это совсем другое дело. Оба моих ответа делают это. –

+0

Большое спасибо за помощь. Я не знаю о Linq. но если вы могли бы помочь мне добавить тега после стихийных бедствий тега я бы очень благодарен вам – Priyankara

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