0
    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);
        }
    }

当我循环到liesviewitem 时出现错误。请协助,谢谢。

4

1 回答 1

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(),
});

现在该数组将包含任何缺失元素的空引用。我不知道列表视图是否会处理这个问题,请注意。

如果您不想处理找不到 name/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 是什么样子,我们就无法知道您需要什么名称空间。

于 2013-10-01T06:22:23.813 回答