заполнение шаблона xml во время выполнения из коллекции объектов во время выполнения

#c# #.net #xml

#c# #.net #xml

Вопрос:

У меня есть xml-шаблон, в котором есть заголовок и раздел сведений внутри него. Я должен заполнить данные в XML-шаблон во время выполнения из коллекции объектов. подробная часть будет повторяться, поэтому я буду добавлять подробную часть в XML-документ в цикле foreach. в настоящее время я использую xmldocument, но я читал, что xmldocument занимает больше памяти и замедляет процесс при увеличении размера XML-файла. Пожалуйста, подскажите мне, каков наилучший подход.

пример tempalte

 <Document>
  <Header>
    <OrgName></OrgName>
    <OrgAddress></OrgAddress>
  </Header>
  <Detail>
    <EmpId> </EmpId>
    <EmpName></EmpName>
    <Address>
      <Stree1></Stree1>
      <Stree2></Stree2>
      <Pin></Pin>
      <City></City>
    </Address>
  <Detail>
</Document>
 

Ожидаемый результат

 <Document>
  <Header>
   <OrgName>abc</OrgName>
   <OrgAddress>asd dfs 999 dfsd</OrgAddress>
  </Header>
  <Detail>
   <EmpId>100 </EmpId>
   <EmpName>Sham</EmpName>
   <Address>
       <Stree1>church street</Stree1>
       <Stree2>fgdf</Stree2>
       <Pin>5472</Pin>
       <City>Huston</City>
   </Address>
<Detail>
<Detail>
  <EmpId>112 </EmpId>
  <EmpName>Tomi</EmpName>
  <Address>
      <Stree1>fsdf</Stree1>
      <Stree2>fgdf</Stree2>
      <Pin>3455</Pin>
      <City>Huston</City>
  </Address>
<Detail>
<Detail>
 <EmpId>120 </EmpId>
  <EmpName>GhanSham</EmpName>
  <Address>
      <Stree1>sfssdf</Stree1>
      <Stree2>fgdf</Stree2>
      <Pin>6574</Pin>
      <City>Huston</City>
  </Address>
<Detail>
</Document>
 

Ответ №1:

Если вам нужен наиболее эффективный способ записи Xml с использованием памяти, вам следует использовать класс XmlWriter .

http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx

Вот пример, использующий некоторые из ваших Xml:

 using(XmlWriter writer = XmlWriter.Create("output.xml"))
{
    writer.WriteStartElement("Document");
    writer.WriteStartElement("Header");

    writer.WriteStartElement("OrgName");
    writer.WriteString("abc");
    writer.WriteEndElement();

    writer.WriteStartElement("OrgAddress");
    writer.WriteString("asd dfs 999 dfsd");
    writer.WriteEndElement();

    // End Header
    writer.WriteEndElement();

    writer.WriteStartElement("Detail");

    writer.WriteStartElement("EmpId");
    writer.WriteString("100");
    writer.WriteEndElement();

    // End Detail
    writer.WriteEndElement();

    // End Document
    writer.WriteEndElement();
}
 

Комментарии:

1. Я согласен с тобой, Майк, у меня есть одна проблема: здесь жестко запрограммирована структура xml, я хочу, чтобы она была настроена так, чтобы позже я хотел изменить позиции узла или пометить некоторые узлы необязательными, тогда я смогу это настроить. используя шаблон, я могу редактировать шаблон в любое время и изменять расположение узлов.

2. Майк для решения проблемы, о которой я упоминал в комментарии выше, я использовал xslt. Спасибо