XML对象引用未设置为对象的实例

时间:2019-03-25 06:26:14

标签: c# xml

我想阅读此XML,但它只给我“对象引用未设置为对象的实例。

XDocument doc = XDocument.Parse(responseString);

string valueX = doc.Root.Element("reponse").Element("point").Element("x").Value;
string valueY = doc.Root.Element("reponse").Element("point").Element("y").Value;

Console.WriteLine("TEST");
Console.WriteLine("Timb East" + valueX);
Console.WriteLine("Timb North" + valueY);

这是我的responseString XML示例,我想取X和Y的值。

<reponse><point><x>12557735.513928</x><y>5500887.2196169</y><projection>EPSG::29873</projection></point></reponse>

有人能给我一个提示这里出了什么问题吗?谢谢。

编辑:将响应拼写固定为响应。

4 个答案:

答案 0 :(得分:0)

有些事情不是您想像的

Element的任何呼叫都可能返回null

XContainer.Element(XName) Method

  

与指定XName匹配的XElement,或者为null。

如果不确定,请使用null conditional operator

string valueX = doc.Root.Element("response")?.Element("point")?.Element("x")?.Value;

但是,很有可能它没有按您期望的那样解析,或者数据不是您期望的

答案 1 :(得分:0)

如果您像下面那样更改代码以使用GetElementsByTagName()类型的XmlDocument方法怎么办

        string msg = "<response><point><x>12557735.513928</x><y>5500887.2196169</y><projection>EPSG::29873</projection></point></response>";             
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(msg);
        var valueX = doc.GetElementsByTagName("x")[0].InnerText;
        string valueY = doc.GetElementsByTagName("y")[0].InnerText;

        Console.WriteLine("TEST");
        Console.WriteLine("Timb East" + valueX);
        Console.WriteLine("Timb North" + valueY);

答案 2 :(得分:0)

两个问题,都与如何访问根元素有关:

  1. XML中的根元素名称与您的代码期望的根元素名称之间存在不匹配(拼写不一致)。

    XML包含根元素<reponse>(拼写错误),但是您的c#代码使用"response"(拼写正确)。

    您需要修复代码和XML根元素名称,以使其一致。

  2. 这样做的时候

    doc.Root.Element("response")...
    

    您正在尝试访问XML文档根元素的名为<response>子元素。但是<response>(或<reponse>)已经是根元素,并且没有这样的子元素。因此,您需要执行以下操作:

    var valueX = doc.Root.Element("point").Element("x").Value;
    

    var valueX = doc.Element("reponse").Element("point").Element("x").Value;
    

    (即doc.Rootdoc.Element("reponse")在做同样的事情,即返回根元素,因此不需要同时执行这两项。)

提琴here

答案 3 :(得分:0)

假设xml仅包含一个.chat { display: none } .menu.open { color: red; font-weight: bold; } .chat.open { display: block } <x>节点,则可以尝试以下代码

<y>