我有一个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 。如何删除它?
答案 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()
方法。