Inquiridor
Como manipular documento com xml Schemalocation?

Pergunta
-
Olá amigos,
Eu estou com um grande problema para realizar a manipulação de um documento que está em XML.vou utilizar este exemplo,no entanto não é o documento real que estou trabalhando pois o documento tem varias linhas
<Report xmlns="csmgeneralrange" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="csmgeneralrange http://150.70.89.26/ReportServer?%2fwfrmreport%2fen%2fcsmgeneralrangers%3aFormat=xmlrc%3aSchema=True" Name="csmgeneralrange" Textbox4="empresa">
<Employee>
<SSN>737333333</SSN>
<Name>ED HARRIS</Name>
<DateOfBirth>1960-01-01</DateOfBirth>
<EmployeeType>FULLTIME</EmployeeType>
<Salary>4000</Salary>
</Employee>
</Report>Então eu estou querendo pegar informações de um documento e filtrar,já tentei utilizar a Xquery so que quando faço me retorna um valor vazio ,já tentei também fazer uns testes com o modify exemplo inseri esse documento em uma variavel XML com uma coluna com o nome de 'coluna' para deletar so que da uma mensagem que foi relaizado mais não e feita nenhuma alteração.
UPDATE xml_2
SET coluna.modify('
delete /Report)Estou já sem alternativas se alguém puder me ajudar quanto a isso ficaria muito grato.
- Movido Gustavo Maia Aguiar quarta-feira, 12 de maio de 2010 22:07 (De:SQL Server - Desenvolvimento Geral)
Todas as Respostas
-
Olá Rodrigo.
Executei alguns testes com o código xml que você postou, o teste consistiu em aplicar um filtro simples.
Realmente não retorna linha, contudo, ao acrescentar um prefixo (AAAAA) para o namespace 'csmgeneralrange' começou a retornar linhas.
Veja o código do teste:
DECLARE @xml XML set @xml=convert(xml, '<Report xmlns:AAAAA="csmgeneralrange" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="csmgeneralrange http://150.70.89.26/ReportServer?%2fwfrmreport%2fen%2fcsmgeneralrangers%3aFormat=xmlrc%3aSchema=True" Name="csmgeneralrange" Textbox4="empresa"> <Employee> <SSN>7373</SSN> <Name>ED HARRIS</Name> <DateOfBirth>1960-01-01</DateOfBirth> <EmployeeType>FULLTIME</EmployeeType> <Salary>4000</Salary> </Employee> <Employee> <SSN>4444</SSN> <Name>EDWARD KIBZU</Name> <DateOfBirth>1970-10-01</DateOfBirth> <EmployeeType>FULLTIME</EmployeeType> <Salary>500</Salary> </Employee> <Employee> <SSN>111</SSN> <Name>PAULAO</Name> <DateOfBirth>1985-06-03</DateOfBirth> <EmployeeType>FULLTIME</EmployeeType> <Salary>99999</Salary> </Employee> </Report>' ) select x.tbl.value('Name[1]', 'varchar(50)'), x.tbl.value('DateOfBirth[1]', 'varchar(50)') from @xml.nodes('//Report/Employee') AS x(tbl) where x.tbl.value('SSN[1]', 'int') > 111
-
-
Boa Tarde,
Segue a solução:
declare @xml xml set @xml = '<Report xmlns="csmgeneralrange" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="csmgeneralrange http://150.70.89.26/ReportServer?%2fwfrmreport%2fen%2fcsmgeneralrangers%3aFormat=xmlrc%3aSchema=True" Name="csmgeneralrange" Textbox4="empresa"> <Employee> <SSN>737333333</SSN> <Name>ED HARRIS</Name> <DateOfBirth>1960-01-01</DateOfBirth> <EmployeeType>FULLTIME</EmployeeType> <Salary>4000</Salary> </Employee> </Report>' select @xml.value(' declare default element namespace "csmgeneralrange"; (/Report/Employee/SSN)[1]','int')
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comSimulado para o Exame 70-433 - MCTS: Microsoft SQL Server 2008 - Database Development – Parte 03
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!1077.entry
Classifique as respostas. O seu feedback é imprescindível- Sugerido como Resposta Gustavo Maia Aguiar quinta-feira, 17 de junho de 2010 21:05