private void ButtonRequest_Click(object sender, EventArgs e)
{
XmlDocument xml = new XmlDocument();
XmlDocument request = new XmlDocument();
XmlDocument fil = new XmlDocument();
request = xmlRequest1();
fil = xmlFilter();
response = doAvail(request, fil);
XElement po = XElement.Parse(response.OuterXml);
IEnumerable<XElement> childElements = from el in po.Elements() select el;
foreach (XElement el in childElements)
{
ListViewItem item = new ListViewItem(new string[]
{
el.Descendants("Name").FirstOrDefault().Value,
el.Descendants("PCC").FirstOrDefault().Value,
el.Descendants("BusinessTitle").FirstOrDefault().Value,
});
ListViewResult.Items.Add(item);
}
}
当我循环到lieviewitem时,ı有一个错误。 请帮助,谢谢。
答案 0 :(得分:1)
您正在使用FirstOrDefault()
,如果找不到任何值,它将返回null
- 但您无条件地取消引用该返回值。如果你做想要处理你没有获得任何值的情况,只需使用强制转换为string
而不是Value
属性:
ListViewItem item = new ListViewItem(new string[]
{
(string) el.Descendants("Name").FirstOrDefault(),
(string) el.Descendants("PCC").FirstOrDefault(),
(string) el.Descendants("BusinessTitle").FirstOrDefault(),
});
现在,数组将包含任何缺少元素的空引用。我不知道列表视图是否会处理,请注意。
如果您不想要处理找不到名称/ pcc / title的情况,请使用First
清楚说明:
ListViewItem item = new ListViewItem(new string[]
{
el.Descendants("Name").First().Value,
el.Descendants("PCC").First().Value,
el.Descendants("BusinessTitle").First().Value,
});
当然,目前仍然会给你一个例外 - 只是更清楚一个。我的猜测是你错过了一个你真正想要的命名空间:
XNamespace ns = "some namespace URL here";
ListViewItem item = new ListViewItem(new string[]
{
el.Descendants(ns + "Name").First().Value,
el.Descendants(ns + "PCC").First().Value,
el.Descendants(ns + "BusinessTitle").First().Value,
});
...但是我们不知道你需要什么命名空间而不知道你的XML是什么样的。