2011-03-13 46 views
0

XML: AAA BBB 插入新的XML節點LINQ

代碼

var doc = XDocument.Load (Server.MapPath(".") + "\\Questions.config"); 
var elements = from element in doc.Descendants("Question") 
       select new 
       { 
        Id = element.Element("Id").Value, 
        Text = element.Element("Text").Value, 
        Reserver = element.Element("Reserver") != null 
       }; 

StringBuilder builder = new StringBuilder(); 
foreach (var question in elements) 
{ 
    builder.AppendLine(question.Id + "-" + question.Text); 
} 
myTextBox.Text = builder.ToString(); 

如何將新節點 '問題',以XML文件

+0

接受答案,如果它幫助你。你也會得到聲譽 – Stefan 2011-03-13 14:08:29

+0

你想要在XML中更新值* to *的什麼?您已經提供了示例輸入 - 您希望輸出是什麼? – 2011-03-13 14:13:07

+0

更新'aaa'到'kkk'by linq – beginner 2011-03-13 14:14:34

回答

1

目前還不清楚你的問題意味着什麼,但在更新XML文件的基本過程是沿着線:

  • 加載XML文件到內存中,因爲你已經做
  • 標識要更改的元素,這將取決於什麼樣的標準是
  • 更新它(例如,設置Value屬性「KKK」按您的意見)
  • 保存使用doc.Save("file.xml")或類似
  • 012的東西XML文檔

如果沒有更精確的要求,很難做到更精確。彷彿一個例子,如果你想前綴文檔中的每個Text節點與「問題X:」其中X是問題的ID,你可能會寫類似:

var doc = XDocument.Load("file.xml"); 
var elements = doc.Descendants("Question"); 

foreach (var question in elements) 
{ 
    int id = (int) question.Element("ID"); 
    XElement textElement = question.Element("Text"); 
    textElement.Value = "Question: " + id + " = " + textElement.Value; 
} 

doc.Save("changed.xml"); 

或更改每一個「AAA 「文本元素爲」kkk「:

var doc = XDocument.Load("file.xml"); 
var elements = doc.Descendants("Text") 
        .Where(x => x.Value == "aaa"); 

foreach (var textElement in elements) 
{ 
    textElement.Value = "kkk"; 
} 

doc.Save("changed.xml"); 
+0

什麼是doc.Save(「changed.xml」); <「changed.xml」> – beginner 2011-03-13 14:35:36

+0

更新後保存的內容 – beginner 2011-03-13 14:44:42

1

你想要做這樣的事嗎?

var doc = XDocument.Load (Server.MapPath(".") + "\\Questions.config"); 
var elements = from element in doc.Descendants("Question") 
       select new 
       { 
        Id = element.Element("Id").Value, 
        Text = element.Element("Text").Value, 
        Reserver = element.Element("Reserver") != null 
       }; 

StringBuilder builder = new StringBuilder(); 
foreach (var question in elements) 
{ 
    builder.AppendLine(question.Id + "-" + question.Text); 
} 
myTextBox.Text = builder.ToString(); 

編輯:如果您想更新問題,那麼你需要稍微修改上面的代碼。

var elements = from element in doc.Descendants("Question") 
       select new 
       { 
        Id = element.Element("Id"), 
        Text = element.Element("Text"), 
        Reserver = element.Element("Reserver") 
       }; 
StringBuilder builder = new StringBuilder(); 
foreach (var question in elements) 
{ 
    // Read 
    builder.AppendLine(question.Id.Value + "-" + question.Text.Value); 

    // Write 
    question.Reserver.Value = "True"; 
} 
myTextBox.Text = builder.ToString(); 

這樣,你沒有選擇了值,但代替的XElement,所以你可以修改XML。還請記住使用XDocument.Save()保存文件。

+0

坦克。非常非常非常麻煩。如何可以updata xml由linq – beginner 2011-03-13 14:07:03

+0

我不明白爲什麼這個答案已被接受,因爲它根本不修改XML ... – 2011-03-13 14:16:03

+0

嗨喬恩,問題是不同的以前。看看編輯;)無論如何,我已經用新的請求更新它。 – 2011-03-13 14:18:38