• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

skcratch

[Resolvido] - Parsing string XML

5 mensagens neste tópico

Viva!

Neste momento, tenho a seguinte string no formato XML sobre a qual gostaria de realizar parsing:

<?xml version='1.0' encoding='ISO-8859-1'?>
<autentica>
<campo nome='a'>1</campo>
<campo nome='b'>2</campo>
<campo nome='c'>3</campo>
<campo nome='d'>4</campo>
</autentica>

Aquilo que pretendo é obter o valor associado ao campo 'a'. Neste momento, tenho o seguinte código:

bool flag = true;
        while (reader.Read())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Text:
                    {
                        if (flag)
                        {
                            sessao = Convert.ToInt64(reader.Value);
                            flag = false;
                        }
                        break;
                    }
            }
        }

Existe alguma forma de obter o valor, do nó especificado?

Grato desde já pela ajuda,

Cumps!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Neste momento, tenho o seguinte código:

XmlReader reader = XmlReader.Create(new StringReader(resposta));

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(reader);

        XmlNodeList autentica = xmlDoc.GetElementsByTagName("autentica");
        long idsessao = Convert.ToInt64(autentica[0].InnerText);?

Aquilo que pretendo é obter o valor associado ao campo com nome 'a' (neste caso o valor 1 - ficheiro anteriormente apresentado).

Será que alguém pode dar uma ajuda?

Cumps!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi!

Olha, outra forma de fazeres isso.

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;

namespace papTestes
{
    class Program
    {
        static void Main(string[] args)
        {
            string xmlDocumentString = 
                  "<?xml version='1.0' encoding='ISO-8859-1'?>"
                + "<autentica>"
                + "<campo nome='a'>1</campo>"
                + "<campo nome='b'>2</campo>"
                + "<campo nome='c'>3</campo>"
                + "<campo nome='d'>4</campo>"
                + "</autentica>";            

            string xpathQuery = "//autentica/campo[@nome='a']";
            XmlDocument autentica = new XmlDocument();
            autentica.LoadXml(xmlDocumentString);
            XmlElement campo = (XmlElement)autentica.SelectSingleNode(xpathQuery);
            
            Console.WriteLine(campo.InnerText);            
            Console.ReadKey();            
        }
    }
}

Usei uma query xpath. Não sei se isto será bem o que queres... Basicamente, nesse excerto consegues obter o valor "1". O "segredo" está mesmo apenas na query xpath. Se não for isso, olha, peço desculpa!  :)

Cmpts

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Outra forma possível é usando LINQ to XML.

using System;
using System.Linq;
using System.Xml.Linq;
using System.IO;

namespace Tralala {
   class Program {
      static void Main(string[] args) {
         String xml = @"<?xml version='1.0' encoding='ISO-8859-1'?>
                        <autentica>
                        <campo nome='a'>1</campo>
                        <campo nome='b'>2</campo>
                        <campo nome='c'>3</campo>
                        <campo nome='d'>4</campo>
                        </autentica>";

         XDocument doc = XDocument.Load(new StringReader(xml));
         Console.WriteLine(doc.Descendants("campo").First(n => n.Attribute("nome").Value == "a").Value);
         Console.ReadKey();
      }
   }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Acabei por utilizar a solução proposta pelo RA, já que estou a utilizar a versão ASP .NET 2.0; senão estou em erro, o LINQ  é uma das principais funcionalidades introduzidas na versão 3.5 do ASP .NET.

Grato a ambos pela ajuda,

Cumps!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora