2014-09-16 3 views
0

У меня есть следующая строка XML в базе данных.Добавление XElement к существующему XDocument

<?xml version="1.0" encoding="utf-16"?> 
<ServiceList> 
    <Service> 
    <COMPAT>2</COMPAT> 
    <EQUIPID>0</EQUIPID> 
    <TITLE>Collect Call and SMS</TITLE> 
    <SMSCOMMAND>0</SMSCOMMAND> 
    <DIALCOMMAND>123</DIALCOMMAND> 
    <DEACTIVATIONCOMMAND>0</DEACTIVATIONCOMMAND> 
    <MODE>Dial</MODE> 
    <DETAIL>Here you go.</DETAIL> 
    <IMAGE>2014-16-9--16-28-25</IMAGE> 
    <LONGDESC> 
     <![CDATA[<p>P<br />P<br />P&nbsp;</p>]]> 
    </LONGDESC> 
    <Mechanism> 
     <Title>Mech Title</Title> 
     <Description>Here you go.</Description> 
     <Trigger>Mech Trigger</Trigger> 
     <Controls>1</Controls> 
    </Mechanism> 
    </Service> 
</ServiceList> 

мне нужно добавить/appened следующий элемент внутри списка каналов

<Service> 
<COMPAT>2</COMPAT> 
<EQUIPID>0</EQUIPID> 
<TITLE>Collect Call and SMS</TITLE> 
<SMSCOMMAND>0</SMSCOMMAND> 
<DIALCOMMAND>123</DIALCOMMAND> 
<DEACTIVATIONCOMMAND>0</DEACTIVATIONCOMMAND> 
<MODE>Dial</MODE> 
<DETAIL>Here you go.</DETAIL> 
<IMAGE>2014-16-9--16-28-25</IMAGE> 
<LONGDESC><![CDATA[<p>P<br />P<br />P&nbsp;</p>]]></LONGDESC> 
<Mechanism> 
    <Title>Mech Title</Title> 
    <Description>Here you go.</Description> 
    <Trigger>Mech Trigger</Trigger> 
    <Controls>1</Controls> 
</Mechanism> 
</Service> 

C# код приведен ниже, где я создаю документ

  XElement ServiceList = 
       new XElement("ServiceList", 
        new XElement("Service", 
         new XElement("COMPAT", "2"), 
         new XElement("EQUIPID", equipId), 
         new XElement("TITLE", form["Title"]), 
         new XElement("SMSCOMMAND", smscommand), 
         new XElement("DIALCOMMAND",dialcommand), 
         new XElement("DEACTIVATIONCOMMAND", smsdecactivationcommand), 
         new XElement("MODE", mode), 
         new XElement("DETAIL", form["Detail"]), 
         new XElement("IMAGE", Datetime), 
         new XElement("LONGDESC", new XCData(htmlstring)), 
         new XElement("Mechanism", 
           new XElement("Title", form["Mechanism.Title"]), 
           new XElement("Description", form["Mechanism.Description"]), 
           new XElement("Trigger", form["Mechanism.Triger"]), 
           new XElement("Controls", form["Mechanism.Controls"]) 
          ) 
         )); 

      XDocument xml = new XDocument(ServiceList); 

Я просто преобразовать вышеуказанный документ для строки с помощью следующего метода и вставки его в базу данных в виде строки.

public string GetXMLAsString(XDocument myxml) 
    { 

     StringWriter sw = new StringWriter(); 
     XmlTextWriter tx = new XmlTextWriter(sw); 
     myxml.WriteTo(tx); 

     string str = sw.ToString(); 
     return str; 
    } 
+0

Я немного смущен: вы читаете XML из базы данных или каждый раз генерируете его? Если он уже находится в базе данных, почему он пытается добавить к нему? Вы действительно пытаетесь создать XML и сохранить его в базе данных? –

+0

то, что я хочу, - это генерировать XML-документ один раз из кода, который может быть сохранен в базе данных в виде строки. то всякий раз, когда мне нужно добавить элемент, я заберу эту строку XML-документа и добавлю к ней xElement. Я просто хочу знать, как я могу это сделать? –

ответ

0

Предполагая, что вы в состоянии получить строку XML обратно из базы данных и сохранить его в виде строки переменной xml, то вы можете загрузить его XDocument следующим образом:

string xml; 
..... 
XDocument doc = XDocument.Parse(xml); 

И при условии, что вы можете построить новый <Service> узел как XElement объект на который ссылается переменная newService, вы можете легко добавить его в doc с использованием XElement.Add() метода:

XElement newService; 
..... 
doc.Root.Add(newService); 

Затем вам необходимо заменить XML в базе данных с обновленным XML:

string updatedXml = doc.ToString(); 
//save updatedXml to your database 

Вы можете легко получить содержимое XML, вызвав ToString() на XDocument объекта, как показано в приведенном выше примере.

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