首页 > 解决方案 > 在 C# 中删除一个节点正在创建一个 NULL

问题描述

我有一个 XML 文件,我正在将其读入 Web API 并将其作为 JSON 字符串返回。我想在将其作为 JSON 返回之前从 XML 中删除一些节点(不保存到文件中)。

我的 XML 文件:

<CurrentStatus>
    <Time Stamp= "12:30">
        <price>100</price>
        <amount>1</amount>
    </Time>

    <Time Stamp= "14:50">
        <price>10</price>
        <amount>5</amount>
    </Time> 

    <Time Stamp= "16:30">
        <price>10</price>
        <amount>5</amount>
    </Time>     
</CurrentStatus>

我删除节点的代码:

//Read XML
XDocument xDocHistory = XDocument.Load(@"D:\myfile.xml");

                //Go through all the Time nodes one by one
                foreach (XElement TimeNode in xDocHistory.Descendants("Time"))
                {
                    string nodeTimeStamp = TimeNode.Attribute("Stamp").Value.ToString();

                    if(nodeTimeStamp == "16:30")
                    {
                        TimeNode.RemoveAll();
                    }

                }

                //Convert XML data into JSON string
                string jsonStr = JsonConvert.SerializeXNode(xDocHistory);
JObject json = JObject.Parse(jsonStr);
                return Ok(json);

JSON输出:

"CurrentStatus": {
    "Time": [
        {
            "@Stamp": "12:30",
            "price": "100",
            "amount": "1"
        },
        {
            "@Stamp": "14:50",
            "price": "10",
            "amount": "5"
        },            
        null
    ]
}

问题:删除的节点在 JSON 输出中显示为NULL 。我怎样才能删除它?

标签: c#xml

解决方案


使用Remove而不是RemoveAll.

foreach (XElement timeNode in xDocHistory.Descendants("Time").ToList())
{
    string nodeTimeStamp = timeNode.Attribute("Stamp").Value;

    if (nodeTimeStamp == "16:30")
    {
        timeNode.Remove();
    }
}

注意ToList()方法。


推荐阅读