簡體   English   中英

使用LINQ插入新的XML節點

[英]Insert new XML node using LINQ

XML:1 aaa 2 bbb

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文件

你想做這樣的事嗎?

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()保存文件。

目前還不清楚你的問題到底意味着什么,但更新XML文件的基本過程將是:

  • 正如您所做的那樣,將XML文檔加載到內存中
  • 確定要更改的元素,具體取決於條件
  • 更新它(例如根據您的評論將Value屬性設置為“kkk”)
  • 使用doc.Save("file.xml")或類似的東西保存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”Text元素更改為“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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM