在尝试查询xdocument

时间:2017-11-17 07:44:32

标签: c# asp.net .net wcf c#-4.0

我正在尝试使用以下代码从具有XML格式的Web响应中提取数据 但是我在这行 var status = html.Element(“Status”)

这里得到空引用异常
if (oHttpWebResponse.StatusCode.ToString().ToLower() == "ok")
    {
        string contentType = oHttpWebResponse.ContentType;
        Stream content = oHttpWebResponse.GetResponseStream();
        XDocument xDoc = new XDocument(XDocument.Load(content));
        var html = xDoc.Root.Element("html");
        var status = html.Element("Status"); // getting System.NullReferenceException here 
       var statusValue = status.Value;
        var lice = html.Element("LicenseKey").Value;

    }

我不是为什么我收到此错误,xml格式看起来像这样..

<html>
<Status>
200
</Status>
<LicenseKey>
FXOZ-HTTEKG-3QYB-MP2NPQ-AC7I3C-76SX-DVN4BA-C55RMK-RV2P-O5NSOQ
</LicenseKey>
<CustomerId>
U2N3XCAV
</CustomerId>
</html>

我不知道为什么我会收到此错误,如果有任何人请帮助我这个非常感谢的查询...

提前致谢..

2 个答案:

答案 0 :(得分:1)

xDoc.Root是全文,因为根是html标记。它没有子元素。 要根据其名称获取元素,可以运行以下代码:

var status = xDoc.Root.Elements("Status").FirstOrDefault();
// ensure not null is assigned to "stringValue"
var statusValue = status==null? String.Empty: status.Value; 

在C#6.0之后,您也可以使用此分配来确保null未分配给stringValue

statusValue = status?.Value ?? String.Empty;

答案 1 :(得分:0)

xDoc.Root是&#34; html&#34;在这个xml文档中标记,所以你正在寻找一个&#34; html&#34;这个&#34; html&#34;下的子元素标签就是为什么它为空。