Inquiridor
XML

Pergunta
-
Tenho que receber um xml em uma procedure. Carrega-lo em duas tabelas (header e detail),
Criticar os dados e se tudo estiver ok, salvar os dados na tabela de produção com consistencia trasacional.
Ate ai tudo bem.
O problema é que o programdor vb.net esta me passando o xml na estrutura abaixo:
<clsConta xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ContaDetalhe>
<clsContaDetalhe>
<Nome>TESTE FELIPE 2</Nome>
<IDPlanoConta>49239</IDPlanoConta>
<Valor>5000</Valor>
</clsContaDetalhe>
<clsContaDetalhe>
<Nome>TESTE FELIPE 2</Nome>
<IDPlanoConta>49239</IDPlanoConta>
<Valor>5000</Valor>
</clsContaDetalhe>
</ContaDetalhe><IDCentroCusto>3</IDCentroCusto>
<Nome>CONTA TESTE FELIPE</Nome>
<Vencimento>2012-03-14T00:00:00-03:00</Vencimento>
<Pagamento>2012-03-14T00:00:00-03:00</Pagamento>
<Valor>5000</Valor>
<Juros>2</Juros>
<Mora>1</Mora>
<Responsavel>-1</Responsavel>
<GUID />
</clsConta>'
E eu preferia no formato:
'
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
<OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
<OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
</Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
<Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
<OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
</Order>
</Customer>
</ROOT>'A diferença pricipal é o formato de atribuiçao. Com o igual para atribuir os valores as colunas.
Uso nodes para transformar o segundo exmplo em tabelas. Ja no primeiro formato, so consegui usando a funcao
sp_xml_preparedocument. E nao sei se esta funcao é uma boa opçao.
Porderiam comentar, por favor?
Obrigado.- Movido Gustavo Maia Aguiar terça-feira, 20 de março de 2012 04:06 (De:SQL Server - Desenvolvimento Geral)
Todas as Respostas
-
CeiltonLM,
A sp_xml_preparedocument é uma stored procedure existente desde a versão 2000 do SQL Server, muito utilizada em conjunto com o padrão OpenXML nativo desta versão.
Normalmente para fazer uso da mesma, você tem que estabelecer uma padrão de documento XML para poder reconhecer a sua estrutura.
Por padrão ela, lê o texto XML fornecido como entrada, analisa o texto usando o analisador MSXML (Msxmlsql.dll) e fornece o documento analisado em um estado pronto para consumo. Esse documento analisado é uma representação em árvore dos vários nós no documento XML: elementos, atributos, texto, comentários e assim por diante.
Além disso ela possui um limite de elementos abertos de uma única vez, podendo no máximo apresentar 256 elementos.
O formato que você esta querendo também pode ser utilizando no padrão OpenXML, fazendo uso da estrutura de árvore de elementos, através do nó <Root>
Esta estrutura com base no <ROOT> você estará trabalhando com o seu conjunto XML sendo armazenado em uma variável do tipo Varchar.
Gostaria de saber como o seu primeiro formato XML esta sendo gerado? Existe alguma aplicação que você esta utilizando?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Bom Dia,
Eu particularmente não recomendo o uso da sp_xml_preparedocument. É legado, usa objetos COM externos ao SQL Server e se você esquecer de fechar o ponteiro, o memory leak é garantido.
Sugiro mais detalhes em:
Compêndio de XML – Preparação para o exame 70-433 – MCTS Microsoft SQL Server 2008 – Database Development
http://gustavomaiaaguiar.wordpress.com/2010/12/17/compendio-de-xml-%E2%80%93-preparacao-para-o-exame-70-433-mcts-microsoft-sql-server-2008-database-development/[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 28 de março de 2012 16:23
-
Galvão,
É gerado por um de nossos programadores no Visual Studio 2010.
Uma Windows Aplication Visual Basic.Net.
Nao sei qual objeto do grame work ele usa. Mas posso verificar se necessario.
O programador me mandou o arquivo XML para uma inclusao em que deve ser garantida a unicidade da transacao.
Nao gostei do formato. Preferia a forma:
<Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
<OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>Acredito que assim me facilitaria o uso OpenXML e as funcoes de nodes.
- Editado CeiltonLM segunda-feira, 19 de março de 2012 21:58
-
-
Ceilton,
Cara, o Visual Studio 2010 com certeza vai oferecer outros recursos e tecnologias bem mais atuais do que a sp_preparedocument.
Se não estou enganado dentro do próprio VS2010 você poderá criar suas estruturas xml de forma simples e rápida.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]