c# как получить неизвестный количество атрибутов из Xml

Рейтинг: 0Ответов: 1Опубликовано: 17.02.2023

День добрый, Когда отправлю запрос получаю вот такого вида ответа:

<?xml version="1.0" encoding="UTF-8"?>
<response result="0">
    <check result="0">
        <extras PRV_TXN_ID="538659" disp1="text1" disp2="text2" disp3="text3"/>
    </check>
</response>

Мне надо вывести на консоль список disp(с номером). Количество disp неизвестен и зависит от запроса. На этом ответе 3 дисплея но до получение ответа я не знал сколько будет дисплеев. Как это узнать?

Парсер:

 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("что то не так");
        }

Ответы

▲ 1Принят

Пожалуйста, попробуйте следующее решение.

Оно использует LINQ to XML.

Нет необходимости в каких-либо циклах.

c#

void Main()
{
    XDocument xdoc = XDocument.Parse(@"<response result='0'>
            <check result='0'>
                <extras PRV_TXN_ID='538659' disp1='text1' disp2='text2' disp3='text3'/>
            </check>
        </response>");

    var attrs = xdoc.Descendants("extras")?
        .Attributes().Where(x => x.Name.LocalName.StartsWith("disp"));
    
    Console.Write(attrs);
    Console.Write(attrs.Count());
}

Результат

disp1="text1" 
disp2="text2" 
disp3="text3" 

3

Скриншот