0

Web サイトからテキスト文字列を取得し、XDocument に解析しています。特定の要素の値を非常に単純なオブジェクト (NWSevent という名前) にフィードしようとしています。私の問題は、元の文字列が変更され、XML ツリーが変化することです。40 までの多数のイベントがある場合もあれば、1 つしかない場合もあれば、すべての特性を備えていないイベントが 1 つだけある場合もあります。アラートがない場合、「イベント」要素にはタイトルがありますが、areaDesc、概要、重大度はありません。

NWSevent には 2 つのコンストラクターがあり、1 つは 1 つの文字列を受け取り、もう 1 つは 4 つの文字列引数を受け取ります。NullReferenceException を回避できません。以下の if ステートメントは、比較する値がないため実行できません。助けていただければ幸いです。

    public static void ParseWeatherData(String xmlString)
    {
        String ticker = string.Empty;
        XDocument root = XDocument.Parse(xmlString);

        XNamespace ns = XNamespace.Get("http://www.w3.org/2005/Atom");
        XNamespace nsCap = XNamespace.Get("urn:oasis:names:tc:emergency:cap:1.1");

        //get list of entry elements, set conditions for title, areaDesc, etc
        var xlist = root.Descendants(ns + "entry").Select(elem => new
        { //use first or default to deal with possiblity of null return
            Title = elem.Descendants(ns + "title").FirstOrDefault(),
            AreaDesc = elem.Descendants(nsCap + "areaDesc").FirstOrDefault(),
            Severity = elem.Descendants(nsCap + "severity").FirstOrDefault(),
            Summary = elem.Descendants(ns + "summary").FirstOrDefault()
        });

        foreach (var el in xlist)       //need to address null values when no alerts
        {
            if (el.AreaDesc.Value != null)      //causes yellow null ERROR; no value exists for el.areaDesc.value
            {
                String titleIn = el.Title.Value;
                String areaIn = el.AreaDesc.Value;
                String severityIn = el.Severity.Value;
                String summaryIn = el.Summary.Value;
                new Models.NWSevent(titleIn, areaIn, severityIn, summaryIn);
            }
            else
            {
                String titleIn = el.Title.Value;
                new Models.NWSevent(titleIn);
            }
        }
4

1 に答える 1