@SnakeAce

Windows 8.1 App C# — Как из Xml документа получить данные и записать их в массивы?

Есть подобный XML код:

<response list="true">
    <count>12</count>
    <post>
    <id>307</id>
    <from_id>123</from_id>
    <to_id>123</to_id>
    <date>123892128</date>
    <post_type>post</post_type>
    <text>Smth TExt</text>
    <attachments list="true">
    <attachment>
    <type>photo</type>
    <photo>
    <pid>123</pid>
    <aid>-7</aid>
    <owner_id>123</owner_id>
    <src>
    http://url.jpg
    </src>
    <src_big>
    http://url.jpg
    </src_big>
    <src_small>
    http://url.jpg
    </src_small>
    <src_xbig>
    http://url.jpg
    </src_xbig>
    <src_xxbig>
    http://url.jpg
    </src_xxbig>
    <src_xxxbig>
    http://url.jpg
    </src_xxxbig>
    <width>990</width>
    <height>1188</height>
    <text/>
    <created>135</created>
    <access_key>67</access_key>
    </photo>
    </attachment>
    <attachment>...</attachment>
    <attachment>...</attachment>
    <attachment>...</attachment>
    <attachment>...</attachment>
    </attachments>
    <comments>
    <count>0</count>
    </comments>
    <likes>
    <count>2</count>
    </likes>
    <reposts>
    <count>0</count>
    </reposts>
    </post>
    <post>...</post>
    <post>...</post>
    </response>


Нужно получить значение из каждого элемента в post и записать их в подобные массивы, где переменная будет означать порядок сообщений.

int[] int_from_id;
     int[] comments_count;
     int[] owner_id;
     string[,] srcofxxxbig; //where [№ post, № of att]
     int[] commentscount;


Собственно то и вопрос - как сделать это?

Пробовал так:
private void name(){
       XDocument parsedoc = XDocument.Parse(herelinktoxmldoc);
       foreach (XElement i in parsedoc.Root.Elements())
      {
         if (w==0)
         {
             count =  Convert.ToInt32(i.Value);
         }
         w++;
     }
     count += 0;
     string[] post_from_id = new String[count];
     string[] post_to_id = new String[count];
     string[] post_date = new String[count];
     string[] post_text = new String[count];
     for (int i = 0; i < count; i++)
     {

         post_from_id[i] = ParsingXmlwoReq(wallxmlstring, "from_id");
         post_to_id[i] = ParsingXmlwoReq(wallxmlstring, "to_id");
         post_date[i] = ParsingXmlwoReq(wallxmlstring, "date");
         post_text[i] = ParsingXmlwoReq(wallxmlstring, "text");

     }
     }
     }
    private string ParsingXmlwoReq(string request, string whatget)
    {
        XDocument parsedoc = XDocument.Parse(request);
        string forreturn = "Null";
        var get = (from uri in parsedoc.Descendants(whatget) select uri.Value);
        foreach (var element in get)
        {
            forreturn = System.Convert.ToString(element);

        }
        return forreturn;
     }
  • Вопрос задан
  • 2655 просмотров
Решения вопроса 1
@SnakeAce Автор вопроса
Использовал метод ниже под Linq
private void ReadDoc()
{
XmlDocument xml = new XmlDocument();
xml.LoadXml(xmlString); // your test XML (hard coded below)

XmlNodeList postList = xml.SelectNodes("/response/post");
Console.WriteLine(postList.Count);
foreach (XmlNode post in postList)
{
Console.WriteLine(post["from_id"]);
Console.WriteLine(post["to_id"]);
Console.WriteLine(post["date"]);
Console.WriteLine(post["text"]);
}
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@carbon88
.NET developer/ORM developer
может быть стоит использовать объекты? тут все замечательно подходит для этого. а то как-то коряво получается. ну и наверное стоит посмотреть на механизмы сериализации/десиреализации.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы