none
Como manipular documento com xml Schemalocation? RRS feed

  • 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)
    quarta-feira, 12 de maio de 2010 13:36

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
    quinta-feira, 13 de maio de 2010 18:40
  • Alisson,

    Obrigado pela atenção,quando li sua resposta fui fazer os testes e e deu certo realmente,só que eu estou tentantando fazer de forma que eu não altere o documento xml,eu não sei nem se tem como fazer isso,se você tiver alguma idéia?

    sexta-feira, 14 de maio de 2010 01:46
  • 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.com

    Simulado 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
    quinta-feira, 17 de junho de 2010 21:04