2012-08-07 41 views
1

我需要能夠將XML數據添加到已經創建的父節點並將其放置在特定的父節點下。將XML數據添加到特定的父節點

有沒有人有最好的方法來做到這一點的任何建議?

我使用XMLWriter來創建原始XML文件。

XmlDocument doc = new XmlDocument(); 
      doc.Load(filePath); 
      for (int counter=0; counter<registeredEventCount; counter++) 
      { 

       try 
       { 
        XmlNode checkEvent = doc.SelectSingleNode("Event/Event[@id='" + registeredArrayList[counter] + "']"); 
        if (checkEvent != null) 
        { 
         try 
         { 
          XmlNode checkDog = doc.SelectSingleNode("Event/Event[@id='" + registeredArrayList[counter] + "']/Dog[@id='" + ukcNumberArrayList[counter] + "']"); 

          if (checkDog == null) 
          { 



           XmlElement newDogId = doc.CreateElement("Dog"); 
           newDogId.SetAttribute("id", ukcNumberArrayList[counter].ToString()); 
           XmlElement newDogName = doc.CreateElement("dogName"); 
           newDogName.SetAttribute("id", dogNameArrayList[counter].ToString()); 
           XmlElement newDogBreed = doc.CreateElement("breed"); 
           newDogBreed.SetAttribute("id", breedArrayList[counter].ToString()); 
           checkEvent.AppendChild(newDogId); 
           newDogId.AppendChild(newDogName); 
           newDogId.AppendChild(newDogBreed); 
           doc.Save(filePath); 
          } 
          else 
          { 
           MessageBox.Show("You have already registered this dog for this specific event"); 
          } 
         } 
+0

請指定哪些實際上不起作用。你有checkDog,但你不使用它。是checkEvent真的!= null? – 2012-08-07 19:04:15

+0

只是上面的代碼不起作用。忽略其餘。是的,我正在加載XML文件 – user1546315 2012-08-07 19:09:12

+0

但現在你已經編輯了什麼是checkEvent,使問題更模糊。當你調試時,你看到新元素出現在checkEvent下面嗎? – 2012-08-07 19:12:40

回答

1

編輯:當代碼改變我的舊回答變得無效。無論如何,我在Visual Studio中測試了你的代碼。有效。這是我輸入xml文件:

<Event> 
    <Event id="0"> 

    </Event> 
</Event> 

輸出:

<Event> 
    <Event id="0"> 
    <Dog id="1"> 
     <dogName id="2" /> 
     <breed id="3" /> 
    </Dog> 
    </Event> 
</Event> 

我的猜測是,你在你的XML文件和代碼IFS一些錯誤,不執行。我認爲XmlSerializer更好,並且對於簡單的XML創建/更新來說,不太容易出錯。

+0

yes文件被加載我確實有上面的代碼來加載xml文件。我複製並粘貼上面的代碼錯誤,正在執行的if語句== == null,因此它被執行。問題在於代碼avobe無法編輯XML文件。 – user1546315 2012-08-07 19:08:54

+0

有趣?您可以將其添加到現有的XML文件中。如果我的XML文件被隱藏,它可能會成爲一個問題嗎? – user1546315 2012-08-07 19:28:08

+0

它應該沒關係。如果doc.Load()沒有拋出異常,則會加載文件。你確認了代碼,直到Save()方法被執行?如果它執行Save()沒有exeption它應該更新文件。你能添加你的示例輸入XML嗎? – Varius 2012-08-07 19:31:48