我的XML示例:
<data>
<Balance>
<LocationName>Locatie 1</LocationName>
<Latitude>39.74</Latitude>
<Longitude>-104.99</Longitude>
<RTI>
<Container>12</Container>
<Pallet>54</Pallet>
</RTI>
</Balance>
// Lots more Balance nodes
</data>
我的代码:
XDocument doc = XDocument.Load(HttpContext.Current.Request.PhysicalApplicationPath + "/Content/saldotracking.xml");
var balances = doc.Descendants("Data");
foreach (var b in balances)
{
if (b.Element("LocationName").Value == id)
{
this.LocationName = b.Element("LocationName").Value;
this.Longitude = Convert.ToDouble(b.Element("Longitude").Value);
this.Latitude = Convert.ToDouble(b.Element("Latitude").Value);
this.pallets = Convert.ToInt16(b.Element("RTI").Element("Pallet").Value);
this.containers = Convert.ToInt16(b.Element("RTI").Element("Container").Value);
}
}
根据调试器,值“b”包含整个XML文档,而不是单个Balance节点。我究竟做错了什么?我正在尝试读取BalanceName节点的所有后代,其LocationName节点的值等于String参数。有人可以帮忙吗?
答案 0 :(得分:4)
根据您的变量名称和用法判断,您没有正确使用Descendants(string XName)
。
public IEnumerable<XElement> Descendants( XName name )
按文档顺序返回此文档或元素的后代元素的筛选集合。 只有具有匹配
XName
的元素才会包含在集合中。
doc.Descendants("Data")
将为您提供Data
的元素名称的所有后代,而不是 Data
元素的所有后代。
我怀疑你想要:
var balances = doc.Descendants("Balance");
表示“给我所有元素名称为"Balance"
答案 1 :(得分:2)
如果您想要读取Balance节点的后代,请使用以下语句
var balances = doc.Descendants(&#34; Balance&#34;);
它将使用&#34;余额&#34;
加载所有元素