2015-12-12 2 views
0

В моем случае я хочу добавить несколько корневых узлов в данную xml-схему. Поэтому я должен добавить несколько пользовательских элементов с его дочерними узлами несколько раз, добавив предыдущее содержимое в XML-файл. Моя проблема заключается в том, как добавить несколько корневых элементов? (Я мог бы добавить один корневой элемент, но не знаю, как добавить следующий).Как добавить несколько корневых элементов в xml-файл и использовать его, добавляя содержимое несколько раз

Это XML-схема

<?xml version="1.0" encoding="utf-8"?> 
<SessionId> 
    <Scource> 
    <User username="AB"> 
     <DOB>25/5/1980</DOB> 
     <FirstName>AVS</FirstName> 
     <LastName>WDW</LastName> 
     <Location>FWAWE</Location> 
    </User> 
    <User username="AqB"> 
    <DOB>25/5/1980</DOB> 
    <FirstName>AVS</FirstName> 
    <LastName>WDW</LastName> 
    <Location>FWAWE</Location> 
    </User> 
    </Scource> 
</SessionId> 

Это мой C# код

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml; 
using System.Xml.Linq; 

namespace FilteringNightwing 
{ 
    class Test 
    { 
     static void Main(string[] args) { 

      string fileLocation = "clients.xml"; 

      if (!File.Exists(fileLocation)) 
      { 
       XmlTextWriter writer = new XmlTextWriter(fileLocation, null); 
       writer.WriteStartElement("SessionId"); 
       writer.WriteEndElement(); 
       writer.Close(); 

      } 

      // Load existing clients and add new 
      XElement xml = XElement.Load(fileLocation); 
      xml.Add(new XElement("User", 
      new XAttribute("username", "AqB"), 
      new XElement("DOB", "25/5/1980"), 
      new XElement("FirstName", "AVS"), 
      new XElement("LastName", "WDW"), 
      new XElement("Location", "FWAWE"))); 
      xml.Save(fileLocation); 

     } 

    } 
} 
  • Как я могу добавить "Источник" тег в качестве другого корневого элемента. Все ваши ответы приветствуются.

ответ

0

У вас не может быть более одного корневого узла. Разбор следующего приведет к ошибке.

XElement root = XElement.Parse("<a></a><b></b>"); 

Это ошибка тоже:

XElement root = XElement.Parse("<a></a><a></a>"); 

Если вы хотите использовать несколько дочерних узлов в корневой узел, который прекрасно. У вас могут быть узлы с одинаковым именем или разные. Такие, как:

<a> 
    <b /> 
    <c> 
    <d /> 
    </c> 
    <b /> 
</a> 

Добавить пользователя в Scource:

XElement xml = XElement.Load(fileLocation); 
XElement scource = xml.Element("Scource"); // Find Scource here 
scource.Add(new XElement("User", // Add new user to Scource here 
    new XAttribute("username", "AqB"), 
    new XElement("DOB", "25/5/1980"), 
    new XElement("FirstName", "AVS"), 
    new XElement("LastName", "WDW"), 
    new XElement("Location", "FWAWE"))); 
xml.Save(fileLocation); 
+0

Но в моем случае структура не похожа на тот, который вы дали. Это как . Как я могу это сделать? –

+0

@OreEraki показал вам, как в его ответе. Вы найдете узел, к которому хотите добавить его, или после, или раньше, или родительский элемент и т. Д. Затем вызовите соответствующий метод с помощью нового 'XElement'. –

+0

@ user0001 Если вы хотите, чтобы новый пользователь добавился к текущему источнику (я отредактирую свой ответ) –

0

Попробуйте

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><SessionId><Source></Source></SessionId>"; 
      XDocument doc = XDocument.Parse(xml); 
      XElement source = doc.Descendants("Source").FirstOrDefault(); 

      source.Add(new XElement("User", new object[] { 
       new XAttribute("username", "AqB"), 
       new XElement("DOB", "25/5/1980"), 
       new XElement("FirstName", "AVS"), 
       new XElement("LastName", "WDW"), 
       new XElement("Location", "FWAWE") 
      })); 
     } 
    } 
} 
​ 
Смежные вопросы