Jump to content

Ler ficheiro XML


joao.palma
 Share

Recommended Posts

Boas!!

Não estou a conseguir ler um ficheiro XML! A estrutura do XML é a seguinte:

<xml_api_reply version="1">
          <weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">
                    <forecast_information>
                              <city data="Viana do Castelo, Viana do Castelo"/>
                               <postal_code data="viana do castelo"/>
                                ...
                    <forecast_conditions>
                                <day_of_week data="seg"/>
                                 <low data="18"/>

E eu quero obter o valor de "city data", "day_of_week", "low"..... ou seja, daria "Viana do Castelo, Viana do Castelo", "seg", "18".

Alguém me pode ajudar?

Obrigado!!!

Link to comment
Share on other sites

    XDocument xdoc = XDocument.Load("weathe.xml");
            var lv1s = from lv1 in xdoc.Descendants("weather")
           select new {
               Header = lv1.Attribute("mobile_zipped").Value,
               Children = lv1.Descendants("forecast_conditions")
           };


        foreach (var lv1 in lv1s){
        TbNotas.Text=lv1.Header;
        foreach (var lv2 in lv1.Children)
            TbNotas.Text = TbNotas.Text + "     " + lv2.Attribute("day_of_week").Value.ToString();

Dá me erro na ultima linha! Object reference not set to an instance of an object.

Link to comment
Share on other sites

"day_of_week" não é um atributo mas sim um elemento. O que é atributo é o "data".

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

entao como é k distingo  day_of_week de low???

São nodos de xml distintos. Logo a distinção é óbvia.

Deves querer algo do género (baseado no xml que puseste no 1º post)

foreach (var lv2 in lv1.Children)
   TbNotas.Text = TbNotas.Text + "     " + lv2.Elements("day_of_week").First().Attribute("date").Value;

Que não gosto muito, preferia algo mais do género:

TbNotas.Text = String.Join("     "
                          , lv1.Children
                               .SelectMany(lv2 => lv2.Elements("day_of_week").Select(dweek => dweek.Attribute("date").Value))
                               .ToArray()
                          );

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

Desculpem a questão! ? deve de ser um bocado básica mas estou com duvidas

eu quero colocar os primeiros 4 resultados em variáveis...

tipo o que fez o Betovsky só que ele fez num array e mandou pa textbox... e eu queria mandar para strings para mais tarde poder manipular....

Já agora aproveito para agradecer ao Betovsky, pelo código que enviou!! funciona 5*!!! Obrigado!! 👍

E obrigado a todos que também tentaram ajudar!!! 😉

Link to comment
Share on other sites

Alguém me pode ajudar?

Por favor....

O 2º codigo do Betovsky este:

TbNotas.Text = String.Join("     "
                          , lv1.Children
                               .SelectMany(lv2 => lv2.Elements("day_of_week").Select(dweek => dweek.Attribute("date").Value))
                               .ToArray()
                          );

da erro no lv2 aki SelectMany(lv2 dá o seguinte erro: Error  1  A local variable named 'lv2' cannot be declared in this scope because it would give a different meaning to 'lv2', which is already used in a 'parent or current' scope to denote something else  C:\Users\João\documents\visual studio 2010\Projects\JP\JP\Form1.cs  48  45  JP

EDIT----------------------------------

Tentei fazer isto:

  foreach (var lv1 in lv1s)
            {
               // TbNotas.Text = lv1.Header;
                foreach (var lv2 in lv1.Children)
                {
                    foreach (var dfweek in lv2.Elements("day_of_week").First().Attribute("data").Value)
                    {
                        MessageBox.Show(dfweek.ToString());
                        
                    }

mas dá-me as letras!! uma a uma!! e eu queria as palavras inteiras!!!

já pesnei em fazer um while mas não tou a conseguir....

tipo isto: while( lv2.Elements("day_of_week").First().Attribute("data").Value)

porque lembrei-me que quando se faz uma consulta ao access utilizo um while...

Alguem me pode ajudar? ???

Link to comment
Share on other sites

Onde tens

                    foreach (var dfweek in lv2.Elements("day_of_week").First().Attribute("data").Value)
                    {
                        MessageBox.Show(dfweek.ToString());
                        
                    }

Queres apenas

MessageBox.Show(lv2.Elements("day_of_week").First().Attribute("data").Value);

Ao teres o foreach estás a percorrer letra a letra da palavra 🙂

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.