none
Problema ao Ler dado do XML Vb.Net RRS feed

  • Pergunta

  •  

    </elemento>

     

     <dado name="PAI_123">

    <dado name="PAI_123">

    <dado name="PAI_456">

    <dado name="Filho_789">

    <dado name="Filho_321">

    </elemento>

    Veja este exemplo acima Gostaria de usar a função " XmlNodeList", para contar o numero de Node.

    Mas gostaria de contar apenas as que tem o nome PAI_ , sendo que não sei as informações que vem depois de PAI_

     

    EX.

    Dim rfs As XmlNodeList

    Dim nmr_node As integer

    rfs = doc.SelectNodes("/*/dado[@name=  'PAI_123']")

     nmr_node=rfs.count

     neste caso (nmr_node) receberia =2 .

    Mas quero apenas passar a informação "PAI" e realizar a contagem de todos com esta informação.

    Poderia ser outra função desde que informe a quantidade de Node

    Atenciosamente

    quinta-feira, 25 de abril de 2013 23:19

Todas as Respostas

  • Bom dia Meu Amigo não entendo muito de VB , porém fiz o código em C# e converti ele em VB talvez haverá erros na hora da conversão , mas ficou assim :

    Dim ms As New System.IO.MemoryStream()
    Dim sw As New System.IO.StreamWriter(ms, System.Text.Encoding.UTF8)
    
    sw.Write("<?xml version=""1.0"" encoding=""utf-8"" ?>")
    sw.Write("<elemento>")
    sw.Write("<dado name=""PAI_123"" /> ")
    sw.Write("<dado name=""PAI_123"" />")
    sw.Write("<dado name=""PAI_456"" />")
    sw.Write("<dado name=""Filho_789"" />")
    sw.Write("<dado name=""Filho_321"" />")
    sw.Write("</elemento>")
    sw.Flush()
    
    ms.Position = 0
    Dim Doc As XElement = XElement.Load(ms)
    
    sw.Close()
    sw.Dispose()
    sw = Nothing
    ms.Close()
    ms.Dispose()
    ms = Nothing
    Dim Lista = Doc.Elements("dado").Where(Function(n) n.Attribute("name").Value.Contains("PAI")).[Select](Function(n) New With { _
    	Key .Inf = n.Attribute("name").Value _
    })
    
    For Each L As var In Lista
    	Console.WriteLine(L.Inf)
    Next
    
    Console.ReadLine()
    

    Já o original em C# é esse :

     System.IO.MemoryStream ms = new System.IO.MemoryStream();
                System.IO.StreamWriter sw = new System.IO.StreamWriter(ms,System.Text.Encoding.UTF8);
              
                sw.Write("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
                sw.Write("<elemento>");
                sw.Write("<dado name=\"PAI_123\" /> ");
                sw.Write("<dado name=\"PAI_123\" />");
                sw.Write("<dado name=\"PAI_456\" />");
                sw.Write("<dado name=\"Filho_789\" />");
                sw.Write("<dado name=\"Filho_321\" />");
                sw.Write("</elemento>");
                sw.Flush();
                
                ms.Position = 0;
                XElement Doc = XElement.Load(ms);
    
                sw.Close();
                sw.Dispose();
                sw = null;
                ms.Close();
                ms.Dispose();
                ms = null;
                var Lista = Doc.Elements("dado").Where(n => n.Attribute("name").Value.Contains("PAI"))
                                                .Select(n => new { Inf = n.Attribute("name").Value});
    
                foreach (var L in Lista)
                {
                    Console.WriteLine(L.Inf);
                }
    
                Console.ReadLine();

    Lembre-se que deve ter o using ou imports System.Linq.Xml

    Espero ter ajudado.


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    sexta-feira, 26 de abril de 2013 12:53