在C#中删除节点将创建NULL

时间:2018-10-16 15:07:30

标签: c# xml

我有一个XML文件,正在将其读入Web API并将其作为JSON字符串返回。我想先将XML中的某些节点删除(而不保存到文件中),然后再将其作为JSON返回。

我的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 。如何删除它?

1 个答案:

答案 0 :(得分:0)

使用Remove代替RemoveAll

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

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

注意ToList()方法。