XDocument 在尝试获取其值之前检查数据

请检查下面的 c# 代码。在这里,我从以下 xml 示例中获取 UPC、EAN 值的值。但当前代码的问题是有一段时间 UPC,EAN 值在 xml 中不可用,然后我得到错误 - 对象未设置为实例......所以我的问题是我如何在尝试之前检查 UPC EAN 如果为空抢夺它的价值?所以我没有得到这样的缺失数据错误?有什么解决办法吗?


C# 代码:


Stream requestStream = request.GetRequestStream();

requestStream.Write(bytes, 0, bytes.Length);

requestStream.Close();

using (var response = (HttpWebResponse)request.GetResponse())

{

    if (response.StatusCode == HttpStatusCode.OK)

    {

        Stream responseStream = response.GetResponseStream();

        string responseStr = new StreamReader(responseStream).ReadToEnd();

        responseStream.Flush();

        responseStream.Close();


        XDocument doc = XDocument.Parse(responseStr);

        XNamespace ns = doc.Root.GetDefaultNamespace();

        string UPC = "";

        string EAN = "";

        if (doc.Descendants(ns + "Ack").FirstOrDefault().Value != "Failure")

        {

            UPC = doc.Descendants(ns + "UPC").FirstOrDefault().Value;

            EAN = doc.Descendants(ns + "EAN").FirstOrDefault().Value;

        }

XML:


<?xml version="1.0" encoding="UTF-8"?>

<GetItemResponse xmlns="urn:ebay:apis:eBLBaseComponents">

<Timestamp>2018-08-04T09:36:11.502Z</Timestamp>

<Ack>Success</Ack>

<Version>1069</Version>

<Build>E1069_CORE_API_18748854_R1</Build>

<Item>

    <ProductListingDetails>

        <ISBN>Does not apply</ISBN>

        <UPC>732030007789</UPC>

        <BrandMPN>

            <Brand>Ommani</Brand>

            <MPN>H0149-OM</MPN>

        </BrandMPN>

        <IncludeeBayProductDetails>true</IncludeeBayProductDetails>

    </ProductListingDetails>

</Item>

</GetItemResponse>

错误图片:

http://img.mukewang.com/6190d6ab0001dfbf11410564.jpg

互换的青春
浏览 189回答 1
1回答

波斯汪

您正在使用FirstOrDefault(),这表明您知道它可能不存在 - 但是您无条件地推迟使用该Value属性,这将导致NullReferenceExceptionifFirstOrDefault()返回 null。两种选择:使用空条件运算符:UPC&nbsp;=&nbsp;doc.Descendants(ns&nbsp;+&nbsp;"UPC").FirstOrDefault()?.Value;使用从XElementto的显式转换string,这将为空输入返回空输出:UPC&nbsp;=&nbsp;(string)&nbsp;doc.Descendants(ns&nbsp;+&nbsp;"UPC").FirstOrDefault();在这两种情况下,UPC如果没有这样的元素,最终都会为 null。
打开App,查看更多内容
随时随地看视频慕课网APP