2013-10-07 45 views
0

這是我的XML是什麼樣子:在C#中的指定位置添加在XML節點

<Runners> 
<Runner> 
    <RunnersBadge> 
    123 
    </RunnersBadge> 
    <Times> 
    </Times> 
</Runner> 

<Runner> 
    <RunnersBadge> 
    456 
    </RunnersBadge> 
    <Times> 
    </Times> 
</Runner> 

我能找到具體的亞軍,例如123,此代碼:

//loadxml 
string findrunner = "123"; 
XmlNodelist nodelist = "xmldocument".SelectNodes("Runners\Runner") 

foreach(XmlNode node in nodelist) 
{ 
if (node["RunnersBadge"].InnerText.Equals(findrunner) 
{ 
//This is how far I get, I can find the runner because if I put a value inside times 
//and output it in a message box, it is showing the proper one for runner 123. 
} 

我怎麼去添加一個節點裏面叫所以XML看起來像這樣:

<Runners> 
<Runner> 
    <RunnersBadge> 
    123 
    </RunnersBadge> 
    <Times> 
     <LapTime> 
     </LapTime> 
     <LapTime> 
     </LapTime> 
    </Times> 
</Runner> 

<Runner> 
    <RunnersBadge> 
    456 
    </RunnersBadge> 
    <Times> 
    </Times> 
</Runner> 

我可以使用CreateElement(「LapTime」)然後ApphendChild添加,然後保存它。這只是在裏面創建新的節點/元素,我將如何去更多的級別,所以我可以在裏面添加新的節點/元素?

+0

你問如何到'LapTime'節點添加爲'Times'節點,而不是孩子的'跑步者節點? –

+0

是的,我是。我已經過了幾個小時,沒有運氣。 – Joey

+0

在調用AppendChild之前,您只需要選擇'Times'節點而不是'Runner'節點。你的循環中有'Runner'節點,獲取名爲'Times'的子節點,並在該節點上調用'AppendChild'。 –

回答

0

下面的代碼應該添加新節點最多兩個級別嘀......

string message = "<Insert XML Here>"; 
string findrunner = "123"; 
XmlDocument document = new XmlDocument(); 
document.LoadXml(message); 
XmlNodeList nodelist = document.SelectNodes("//Runner"); 

foreach (XmlNode node in nodelist) 
{ 
    foreach (XmlNode child in node.ChildNodes) 
    { 
     if (child.Name == "RunnersBadge" && child.InnerText.Equals(findrunner)) 
     { 
      XmlNode Times = null; 
      XmlNode LapTime = null; 
      if ((Times = node.SelectSingleNode("//Times")) == null) 
      { 
       Times = document.CreateNode(XmlNodeType.Element, "Times", ""); 
       node.AppendChild(Times); 
      } 

      LapTime = document.CreateNode(XmlNodeType.Element, "LapTime", ""); 
      LapTime.InnerText = ""; // Set Value Here 
      Times.AppendChild(LapTime); 
      break; 
     }  
    } 
} 
+0

感謝幫助大家,這是一種工作,但它不斷將新節點放在第一位跑步者時間,無論我嘗試使用哪一個RunnerBadge。我嘗試了LINQ到XML,它做了相反的,每次都把它放在最後一個跑步者:/ – Joey