2011-03-13 45 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