我正在尝试循环下面的 xml 文档
<proposer driverId="1">
<conviction convictionId="1">
<code>16</code>
</conviction>
<conviction convictionId="2">
<code>10</code>
</conviction>
</proposer>
<driver driverId="2">
<conviction convictionId="3">
<code>22</code>
</conviction>
</driver>
我的想法是获取所有信念代码,无论是提议者还是驱动程序,并将其存储在字符串列表中,然后通过发送索引,我执行 elementAtDefault 来获取代码
DrivingConvictionCode1 = GetConvictionCode(1, risk),
DrivingConvictionCode2 = GetConvictionCode(2, risk),
DrivingConvictionCode3 = GetConvictionCode(3, risk),
在 GetConvictionCode 方法中,我将索引值与 XmlDoc 一起传递,并调用 GetConvictions 方法,然后执行 Elementatdefault 以基于索引获取 ConvictionCode
private string GetConvictionCode(int convictionSrNo, XmlDocument risk)
{
var convictions = GetConvictions(risk);
return convictions.ElementAtOrDefault(convictionSrNo - 1) == null ? string.Empty : convictions[convictionSrNo - 1];
}
private List<string> GetConvictions(XmlDocument risk)
{
var convictions = new List<string>();
foreach (XmlNode selectNode in risk.SelectNodes("/risk/proposer/conviction"))
{
convictions.AddRange(new[] {selectNode.SelectSingleNode("/risk/proposer/conviction/code").InnerText});
}
foreach (XmlNode selectNode in risk.SelectNodes("/risk/driver/conviction"))
{
convictions.AddRange(new[] {selectNode.SelectSingleNode("/risk/driver/conviction/code").InnerText});
}
return convictions;
}
我在这里面临的问题是在循环中下一个信念值正在被旧的值取代,所以如果第一次循环它是 16 下一次它应该是 10 但它来了 16。任何人都可以帮忙或告诉我任何其他方式
我期望的输出是
DrivingConvictionCode1 = GetConvictionCode(1, risk) > 16,
DrivingConvictionCode2 = GetConvictionCode(2, risk) > 10,
DrivingConvictionCode3 = GetConvictionCode(3, risk) > 22,
您应该使用
InnerText
而不是 .SelectSingleNode("<path>").InnerText
来获取值。
foreach (XmlNode selectNode in risk.SelectNodes("/risk/proposer/conviction"))
{
convictions.AddRange(new[] { selectNode.InnerText });
}
foreach (XmlNode selectNode in risk.SelectNodes("/risk/driver/conviction"))
{
convictions.AddRange(new[] { selectNode.InnerText });
}