none
LINQ To xml RRS feed

  • Pergunta

  • Olá pessoal, uma dúvida me assola a mente...

    Tenho o seguinte schema xml com 3 opções dentro do "choice", sendo o elemento "codigoPrestadorNaOperadora" um Complex Type.

    <element name="origem">
    <complexType>
    <choice>
    <element name="codigoPrestadorNaOperadora" type="ans:ct_identificacaoPrestadorExecutante"/>
    <element name="registroANS" type="ans:st_registroANS"/>
    <element name="cnpjPagador" type="ans:st_CNPJ"/>
    </choice>
    </complexType>
    </element>

    Os elementos deste Complex Type estão definidos a seguir: 

    <complexType name="ct_identificacaoPrestadorExecutante">
    <choice>
    <element name="CNPJ" type="ans:st_CNPJ"/>
    <element name="CPF" type="ans:st_CPF"/>
    <element name="codigoPrestadorNaOperadora" type="ans:st_codigoPrestadorNaOperadora"/>
    </choice>
    </complexType>

     

     

     

     Para obter os dados desta estrutura eu preciso verificar quais valores foram informados e então armazenar uma string vazia nos demais. Para tanto, utilizo o seguinte comando LINQ:

     

     var Result = from a in CabecalhoTransacao
               select new
               {
                 origemRegistroANS = a.Element(ns + "origem").Element(ns + "registroANS") != null ? a.Element(ns + "origem").Element(ns + "registroANS").Value.Trim() : string.Empty,
                 origemCnpjPagador = a.Element(ns + "origem").Element(ns + "cnpjPagador") != null ? a.Element(ns + "origem").Element(ns + "cnpjPagador").Value.Trim() : string.Empty,
                 destinoRegistroANS = a.Element(ns + "destino").Element(ns + "registroANS") != null ? a.Element(ns + "destino").Element(ns + "registroANS").Value.Trim() : string.Empty,
                 destinoCnpjPagador = a.Element(ns + "destino").Element(ns + "cnpjPagador") != null ? a.Element(ns + "destino").Element(ns + "cnpjPagador").Value.Trim() : string.Empty,
                 versaoPadrao = a.Element(ns + "versaoPadrao").Value.Trim()
               };
    Gostaria de saber como faço para verificar no XML quais valores foram informados dentro do elemento "codigoPrestadorNaOperadora", pois este elemento nem sempre vai existir, sendo assim não posso fazer como no exemplo acima pq gera um erro de referência ao objeto...

    quinta-feira, 13 de maio de 2010 21:34

Respostas

  • Boa tarde Alexandre, agradeço pelo post, mas na verdade já achei uma maneira de fazer essa verificação. Só utilizei o operador "&&", ficou mais ou menos assim:

     

    origemCNPJ = a.Element(ns + "origem").Element(ns + "codigoPrestadorNaOperadora") != null && a.Element(ns + "origem").Element(ns + "codigoPrestadorNaOperadora").Element(ns + "CNPJ") != null ? a.Element(ns + "origem").Element(ns + "codigoPrestadorNaOperadora").Element(ns + "CNPJ").Value.Trim() : string.Empty,
                   origemCPF = a.Element(ns + "origem").Element(ns + "codigoPrestadorNaOperadora") != null && a.Element(ns + "origem").Element(ns + "codigoPrestadorNaOperadora").Element(ns + "CPF") != null ? a.Element(ns + "origem").Element(ns + "codigoPrestadorNaOperadora").Element(ns + "CPF").Value.Trim() : string.Empty
    segunda-feira, 17 de maio de 2010 18:44

Todas as Respostas

  • Poderia ter um let para guardar o elemento e depois, fazer a varificação, algo assim:

     var 
    Result = from
     a in
     CabecalhoTransacao
    let ANS= a.Element(ns + "origem" ).Element(ns + "registroANS" ) let CNPJ = a.Element(ns + "origem" ).Element(ns + " cnpjPagador " )
    //fazer para o resto
    select new
    {
    origemRegistroANS = ANS == default(XElement) ? ANS.Value.Trim() : string .Empty,
    //fazer para o resto
    };


    Minato alexandre.minato@hotmail.com - http://www.alexandreminato.com.br
    segunda-feira, 17 de maio de 2010 13:33
  • Boa tarde Alexandre, agradeço pelo post, mas na verdade já achei uma maneira de fazer essa verificação. Só utilizei o operador "&&", ficou mais ou menos assim:

     

    origemCNPJ = a.Element(ns + "origem").Element(ns + "codigoPrestadorNaOperadora") != null && a.Element(ns + "origem").Element(ns + "codigoPrestadorNaOperadora").Element(ns + "CNPJ") != null ? a.Element(ns + "origem").Element(ns + "codigoPrestadorNaOperadora").Element(ns + "CNPJ").Value.Trim() : string.Empty,
                   origemCPF = a.Element(ns + "origem").Element(ns + "codigoPrestadorNaOperadora") != null && a.Element(ns + "origem").Element(ns + "codigoPrestadorNaOperadora").Element(ns + "CPF") != null ? a.Element(ns + "origem").Element(ns + "codigoPrestadorNaOperadora").Element(ns + "CPF").Value.Trim() : string.Empty
    segunda-feira, 17 de maio de 2010 18:44