在运行时从运行时在对象集合中填充xml模板

时间:2014-06-26 02:15:13

标签: c# .net xml

我有一个xml模板,其中包含Header和details部分。 我必须在运行时从对象集合中将数据填充到xml模板中。 详细信息部分将重复,因此我将在foreach循环中将详细信息部分添加到xml文档中。 目前我正在使用xmldocument,但我读到xmldocument占用更多内存,并且在增加xml文件大小时使进程变慢。 请告诉我什么是最好的方法。

tempalte example

<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 个答案:

答案 0 :(得分: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();
}