System.Xml.Linq.XContainer.Element(...) 返回 null

问题描述 投票:0回答:1

我有 postXmlData 方法来发布请求并在 Xml 中获得响应。收到响应后,我试图显示属性名称以(“f”)开头,但出现错误 System.Xml.Linq.XContainer.Element(...) 返回空值。我做错了什么?

postXmlData

public static XmlDocument postXMLData(string xml)
        {
            var request = (HttpWebRequest)WebRequest.Create(Requests.url);
            byte[] bytes;
            bytes = System.Text.Encoding.ASCII.GetBytes(xml);
            request.ContentType = "text/xml; encoding='utf-8'";
            request.ContentLength = bytes.Length;
            request.Method = "POST";
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(bytes, 0, bytes.Length);
            requestStream.Close();
            HttpWebResponse response;
            response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode == HttpStatusCode.OK)
            {
                using (var streamReader = new StreamReader(response.GetResponseStream()))
                {
                    var responseText = streamReader.ReadToEnd();
                    var result = new XmlDocument();
                    result.LoadXml(responseText);
                    return result;
                }
            }

            throw new Exception();
        }

要显示我正在使用 XElement 的属性:

XmlDocument doc = postXMLData(Requests.getStatus("08022140013003"));
            XElement e = XElement.Load(new XmlNodeReader(doc));
            Console.WriteLine(e); //here ok
           
            IEnumerable<XAttribute> attrs1 = e.Element("response").Element("prov").Element("getStatus").Element("pay")?.Attributes().Where(a => a.Name.LocalName.StartsWith("f"));
            Console.WriteLine(attrs1);
            Console.ReadKey();

回复:

<response result="0">
    <prov>
        <getStatus result="0">
            <pay date="2023-02-08T19:44:33+03:00" fatal="false" id="8022140013003" result="0" status="2" uid="26775263057008" value-date="2023-02-08T19:44:40+03:00">
            </pay>
        </getStatus>
    </prov>
</response>
c# linq-to-xml xmldocument
1个回答
0
投票

尝试:

var attrs1 = e.Element("prov").Element("getStatus").Element("pay").Attributes().Where(a => a.Name.LocalName.StartsWith("f"));

您可以通过以下方式验证这一点:

var elements = e.Elements()

只有 1 个元素,不是 response 而是 prov

© www.soinside.com 2019 - 2024. All rights reserved.