簡體   English   中英

C# XML - 修改節點的一行

[英]C# XML - Modify a line of a node

例如,我有以下 XML 文件。 由於干凈的標識符存在“EA MagicNo”,它具有一個永遠不會被使用兩次的單一 ID。

在此示例中,您可以看到,“EA MagicNo=111”后面的“符號”是空的,並且必須獲得一個值,例如“BBB”。

<?xml version="1.0" encoding="utf-8"?>
<EAs>
  <EA MagicNo="000">
    <Date>2022-07-21</Date>
    <Symbol>AAA</Symbol>
  </EA>
  <EA MagicNo="111">
    <Date>2022-07-22</Date>
    <Symbol></Symbol>
  </EA>
</EAs>

我有一個表單應用程序並使用按鈕來做所有事情。

所以我可以用這段代碼刪除一個完整的節點:

private void Btn_Remove_Click(object sender, EventArgs e)
{
    // load xml
    XDocument doc = XDocument.Load(@"test.xml");

    // remove a complete EA-Magic Element-Node
    XElement xel = doc.Descendants("EA")
        .Where(e => (string)e.Attribute("MagicNo") == "000")
        .SingleOrDefault();

    if (xel != null)
    {
        xel.Remove();
    }

    // save xml
    doc.Save(@"test.xml");
}

結果,XML 看起來像這樣:

<?xml version="1.0" encoding="utf-8"?>
<EAs>
  <EA MagicNo="111">
    <Date>2022-07-22</Date>
    <Symbol></Symbol>
  </EA>
</EAs>

我也可以使用以下代碼添加一個完整的新節點:

private void Btn_Add_Click(object sender, EventArgs e)
{
    // load xml
    XDocument doc = XDocument.Load(@"test.xml");

    // add a new "EA" to "EAs"
    var parent = doc.Descendants("EAs")
        .SingleOrDefault();

    if (parent != null)
    {
        // create a new EA Node
        XElement el =
            new XElement("EA",
                new XAttribute("MagicNo", "222"),
                new XElement("Date", "2022-07-23"),
                new XElement("Symbol", "CCC")
            );

        // add it
        parent.Add(el);
}

但我正在努力修改現有節點的一行以添加空值“BBB”。 請您幫我解決所需的代碼行嗎?

准備好的代碼開始:

private void Btn_Modify_Click(object sender, EventArgs e)
{
    // load xml
    XDocument doc = XDocument.Load(@"test.xml");

    // Code to modify the XElement here ...


    // save xml
    doc.Save(@"test.xml");
}

好像你可以只使用 Linq 來獲取空節點,然后修改每個的Value

var nodes = doc.Elements("EAs")
    .SelectMany(e => e.Elements("EA"))
    .SelectMany(e => e.Elements("Symbol"))
    .Where(e => e.Value == "");

foreach (var node in nodes)
{
    node.Value = "BBB";
}

dotnetfiddle

工作解決方案:

 private void Btn_Modify_Click(object sender, EventArgs e) { // load xml XDocument doc = XDocument.Load(@"test.xml"); // Code to modify the XElement here ... // identify exact Node XElement xel = doc.Descendants("EA").Where(x => (string)x.Attribute("MagicNo") == "111").Single(); // modify Value xel.Element("Symbol").Value = "BBB"; // save xml doc.Save(@"test.xml"); }

暫無
暫無

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

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