2011-10-13 52 views
0

一个新条目下面我有一个这样的XML,我想在另一个条目添加到它:插入XML

<?xml version="1.0" encoding="utf-8"?> 
<CampaignRewardsVoucher> 
    <VoucherCode>Vouch001</VoucherCode> 
    <Quantity>3</Quantity> 
</CampaignRewardsVoucher> 

我有上面的XML,但我想Vouch001后添加Vouch002:

<VoucherCode>Vouch002</VoucherCode> 
    <Quantity>3</Quantity> 
    </CampaignRewardsVoucher> 

下面我有它检查如果输入一个重复,并相应地更新代码,如果不是我想创建一个新的Vouch002项,请指点,谢谢:

'Create XmlWriterSettings 
     Dim settings As XmlWriterSettings = New XmlWriterSettings() 
     settings.Indent = True 

     If (Not File.Exists("D:\CampaignRewardsVoucher.xml")) Then 

      'Create XmlWriter 
      Using writer As XmlWriter = XmlWriter.Create("D:\CampaignRewardsVoucher.xml", settings) 

       'Begin write 
       writer.WriteStartDocument() 
       writer.WriteStartElement("CampaignRewardsVoucher") 
       writer.WriteElementString("VoucherCode", DropDownList1.SelectedValue) 
       writer.WriteElementString("Quantity", TextBox1.Text) 

       'End write 
       writer.WriteEndElement() 
       writer.WriteEndDocument() 
      End Using 

     Else 
      ' file already exist, next check if input data already exist    
      Dim myXmlDocument As XmlDocument = New XmlDocument() 
      myXmlDocument.Load("D:\CampaignRewardsVoucher.xml") 

      Dim myXMLNode As XmlNode = myXmlDocument.SelectSingleNode("CampaignRewardsVoucher") 

      If myXMLNode IsNot Nothing And myXMLNode.ChildNodes(0).InnerText = DropDownList1.SelectedValue Then 
       myXMLNode.ChildNodes(1).InnerText = TextBox1.Text 

       myXmlDocument.Save("D:\CampaignRewardsVoucher.xml") 
      Else 

       'insert new node     
       'I need to insert Vouch002 here. 

      End If 

     End If 
+1

的SelectSingleNode总会选择第一CampaignRewardsVoucher所需的位置添加一个新的子节点。它不会看别人。这将导致XML中的数据重复 – evpo

回答

1

您可以使用XmlNode.InsertAfter

'... 
Else 
    Dim root As XmlNode = myXmlDocument.DocumentElement 
    Dim vc As XmlElement = myXmlDocument.CreateElement("VoucherCode") 
    vc.InnerText = "Vouch002" 
    root.InsertAfter(vc, root.FirstChild) 
End If 
'...