关注编写xml

use*_*348 0 xml vb.net

我有一个邮件申请.在发送给每个收件人时,我正在写一个名为mail.xml的XML文件.我使用以下代码:

Dim from As String = txtFrom.Text
Dim txto As String = txtTo.Text
Dim subj As String = txtSubject.Text
Dim body As String = txtBody.Text
Dim settings As New XmlWriterSettings()
settings.Indent = True
settings.NewLineOnAttributes = True
Using writer As XmlWriter = XmlWriter.Create("C:\xmlmailfile.xml", settings)
  writer.WriteStartDocument()
  writer.WriteStartElement("EMail")
  writer.WriteStartElement("From")
  writer.WriteStartAttribute("From")
  writer.WriteValue(from)
  writer.WriteEndAttribute()
  writer.WriteStartElement("To")
  writer.WriteStartAttribute("To")
  writer.WriteValue(txto)
  writer.WriteEndAttribute()
  writer.WriteStartElement("Subject")
  writer.WriteStartAttribute("Subject")
  writer.WriteValue(subj)
  writer.WriteEndAttribute()
  writer.WriteStartElement("Body")
  writer.WriteStartAttribute("Body")
  writer.WriteValue(body)
  writer.WriteEndAttribute()
  writer.WriteEndElement()
  writer.WriteEndDocument()
  writer.Flush()
End Using
Run Code Online (Sandbox Code Playgroud)

输出是:

<?xml version="1.0" encoding="utf-8" ?> 
<EMail>
  <From From="abc@xyz.com">
  <To To="def@pqr.com">
    <Subject Subject="Hi">
      <Body Body="Hello" /> 
    </Subject>
  </To>
  </From>
 </EMail>
Run Code Online (Sandbox Code Playgroud)

在这里,我无法附加到现有输出.只输出一个"电子邮件"部分.我想为每个收件人添加"电子邮件"部分.但是,在上面的代码中,新的部分替换了之前编写的部分.

我怎么能做到这一点?

Jon*_*eet 7

XML文档只能有一个根元素.我建议你有一个根Emails元素,Email下面有元素.请注意,您仍然无法在同一文件中追加新元素 - 您必须阅读现有文件并重写它.理论上你可以覆盖最后一行(你总是知道它会有多长,所以你可以找到正确的位置)但是将文件读入内存更新,附加一个新Email元素,然后写出来整个文件再次.

我也认为这是一个有点奇怪有Body元素的主题元素.我建议这样的结构:

<?xml version="1.0" encoding="utf-8" ?> 
<Emails>
  <Email>
    <From Address="abc@xyz.com">
    <Recipient Type="To" Address="def@pqr.com" />
    <Recipient Type="Cc" Address="ghi@pqr.com" />
    <Subject>Hi</Subject>
    <Body>Body text</Body> 
  </Email>
  <Email>
    <!-- Second email comes here -->
  </Email>
</Emails>
Run Code Online (Sandbox Code Playgroud)