c# - 在 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 。我怎样才能删除它?
解决方案
使用Remove
而不是RemoveAll
.
foreach (XElement timeNode in xDocHistory.Descendants("Time").ToList())
{
string nodeTimeStamp = timeNode.Attribute("Stamp").Value;
if (nodeTimeStamp == "16:30")
{
timeNode.Remove();
}
}
注意ToList()
方法。
推荐阅读
- python - 列表/嵌套列表中的第一个元素
- amazon-web-services - AWS CodeArtifact - 有没有办法定义 LifeCycle 策略?
- c++ - 每条线段包含一个点的最小点数
- jquery - 使用不带 _chartjs 的 json 获取数组:{...},push:ƒ,pop:ƒ,shift:ƒ,splice:ƒ,...]
- json - 这个 JSON 文件有什么问题?无法反序列化
- c++ - 使用 resource.rc 时,Windows 资源管理器中的图标显示 2 个不同的图标
- php - 在 WooCommerce 结帐上为每个产品添加数量输入字段
- foreach - 增强了每个循环优化
- java - 带有开关按钮的 Android ListView - 一次只有一个开关处于活动状态
- pandas - 在 python 中加入 shapefile 并更改其投影坐标系并输出 shapefile