ERRO COM XML

ALEXPASSOS 06/05/2010 08:10:51
#341067
Olá

Eu estou com um xml com essa estrutura:

<?xml version=[Ô]1.0[Ô] standalone=[Ô]yes[Ô]?>
<Contato>
<contato>
<Nome>João</Nome>
<Sobrenome>Silva</Sobrenome>
</contato>
<contato>
<Nome>Maria</Nome>
<Sobrenome>Leite</Sobrenome>
</contato>
<contato>
<Nome>Tecla</Nome>
<Sobrenome>VBMania</Sobrenome>
</contato>
<contato>
<Nome>Alex</Nome>
<Sobrenome>Passos</Sobrenome>
</contato>

</Contato>

Estou querendo fazer um programa simples e queria utilizar o xml como banco de dados.

Eu quero adicionar mas tabelas nesse xml... só que já tentei e dar erro.

como ficaria essa estrura ai com por exemplo uma tabela de usuários.

Ou tenho que criar um xml pra cada tabela do meu sistema.
KILLER 06/05/2010 08:35:41
#341068
Resposta escolhida
primeiro carregue o xml em um data set assim:

dsContato.ReadXml([Ô]C:\TblContato.xml[Ô])

depois adicione registros em um data set assim:

dsContato.Tables(0).Rows.Add(New Object() {txtNome.Text, txtSobrenome.Text})

depois salve o xml assim:

dsContato.WriteXmlSchema([Ô]C:\TblContato.xml[Ô])
dsContato.WriteXml([Ô]C:\TblContato.xml[Ô])

eu fiz um sisteminha que precisava usar xml como banco de dados e isso me atendeu muito bem
qualquer duvida posta aí
ALEXPASSOS 06/05/2010 08:40:02
#341070
O código eu tenho... até peguei um exemplo aqui no vbmania que utiliza o xml como banco de dados.... só que ele esta com essa estrutura que falei.... e quando tento adicionar uma nova tabela dar erro. tentei colocar assim

<?xml version=[Ô]1.0[Ô] standalone=[Ô]yes[Ô]?>
<Contato>
<contato>
<Nome>João</Nome>
<Sobrenome>Silva</Sobrenome>
</contato>
<contato>
<Nome>Maria</Nome>
<Sobrenome>Leite</Sobrenome>
</contato>
<contato>
<Nome>Tecla</Nome>
<Sobrenome>VBMania</Sobrenome>
</contato>
<contato>
<Nome>Alex</Nome>
<Sobrenome>Passos</Sobrenome>
</contato>


<usuario>

</usuario

</Contato>
KILLER 06/05/2010 08:51:01
#341075
fica mais facil se voce utilizar o DataSet

para voce criar mais uma tabela no DataSet ficaria assim

ds.Tables.Add([Ô]Usuario[Ô])

para adicionar colunas:

ds.Tables([Ô]Usuario[Ô]).Columns.Add([Ô]Nome[Ô])
ds.Tables([Ô]Usuario[Ô]).Columns.Add([Ô]Senha[Ô])

para adicionar linhas:

ds.Tables([Ô]Usuario[Ô]).Rows.Add(New Object() {[Ô]Joao[Ô],[Ô]123456[Ô]})
ds.Tables([Ô]Usuario[Ô]).Rows.Add(New Object() {[Ô]Maria[Ô],[Ô]654321[Ô]})

salva o xml como mostrei acima e a estrutura do xml ficaria assim:

<?xml version=[Ô]1.0[Ô] standalone=[Ô]yes[Ô]?>
<Contato>
<contato>
<Nome>João</Nome>
<Sobrenome>Silva</Sobrenome>
</contato>
<contato>
<Nome>Maria</Nome>
<Sobrenome>Leite</Sobrenome>
</contato>
<contato>
<Nome>Tecla</Nome>
<Sobrenome>VBMania</Sobrenome>
</contato>
<contato>
<Nome>Alex</Nome>
<Sobrenome>Passos</Sobrenome>
</contato>

<table>
<usuario>
<Nome>Joao</Nome>
<Senha>123456</Senha>
</usuario
<usuario>
<Nome>Joao</Nome>
<Senha>123456</Senha>
</usuario
</table>
</Contato>

é + ou - isso
KILLER 06/05/2010 08:54:59
#341076
lembrando que voce nao pode colocar acentos nem caracteres especias em xml como por exemplo o João, tem que ficar Joao
ALEXPASSOS 06/05/2010 08:55:38
#341077
certo... vou tentar fazer desse jeito que vc falou.

KILLER 06/05/2010 09:03:38
#341079
Correção o xml ficaria assim com duas tabelas juntas:

<?xml version=[Ô]1.0[Ô] standalone=[Ô]yes[Ô]?>
<Contato>
<contato>
<Nome>Joao</Nome>
<Sobrenome>Silva</Sobrenome>
</contato>
<contato>
<Nome>Maria</Nome>
<Sobrenome>Leite</Sobrenome>
</contato>
<contato>
<Nome>Tecla</Nome>
<Sobrenome>VBMania</Sobrenome>
</contato>
<contato>
<Nome>Alex</Nome>
<Sobrenome>Passos</Sobrenome>
</contato>
<Usuario>
<Nome>Joao</Nome>
<Senha>123456</Senha>
</Usuario>
<Usuario>
<Nome>Maria</Nome>
<Senha>654321</Senha>
</Usuario>
</Contato>
ALEXPASSOS 06/05/2010 23:30:09
#341152
Olá Killer

Eu conseguir cadastrar.... mas não estou conseguindo fazer o alterar e o excluir um item específico.....

Como faço localizar o registro que quero alterar ou excluir no xml?
KILLER 07/05/2010 08:12:12
#341157
se estiver usando o data set faça assim para alterar

ds.Tables([Ô]Usuario[Ô]).rows(linha).Item([Ô]Nome[Ô]) = txtNome.Text

Tables([Ô][Ô]) = Tabela a ser alterada
rows() = A linha onde esta o item a ser alterado
Item([Ô][Ô]) = A coluna onde esta o Item a ser alterado
ALEXPASSOS 07/05/2010 08:40:56
#341158
Não conseguir entender direito.... essa linha que vc colocou entendi... não entendi depois como fica....

eu estou fazendo assim pra cadastrar.

Dim dSet As New DataSet
Dim dTable As New DataTable

dSet.ReadXml(My.Application.Info.DirectoryPath.Replace([Ô]bin\Debug[Ô], [Ô][Ô]) & [Ô]banco/banco.xml[Ô])
dSet.Dispose()

dTable = dSet.Tables([Ô]usuario[Ô])

Dim linha As DataRow
linha = dTable.NewRow

linha([Ô]cod[Ô]) = txtCod.Text
linha([Ô]nome[Ô]) = txtNome.Text
linha([Ô]senha[Ô]) = txtSenha.Text

dTable.Rows.Add(linha)

dSet.WriteXml(My.Application.Info.DirectoryPath.Replace([Ô]bin\Debug[Ô], [Ô][Ô]) & [Ô]banco/banco.xml[Ô])

isso esta funcionando pra cadastrar.... como ficar ai com essa linha que vc colocou pra alterar e excluir

obrigado
KILLER 07/05/2010 09:18:17
#341165
para alterar a linha 5 do dataset por exemplo

dSet.Tables([Ô]usuario[Ô]).rows(4).Item([Ô]nome[Ô]) = txtNome.Text

para alterar ou excluir ou ate mesmo para cadastrar, voce não precisa desmembrar o data set em tabelas e em linhas,
para cadastrar eu concordo porque fica mais facil o entendimento

cadastrar eu faço assim
dSet.Tables([Ô]usuario[Ô]).rows.add(New Object{} (txtCod.Text, txtNome.text, txtSenha.text))

alterar
dSet.Tables([Ô]usuario[Ô]).rows(4).Item([Ô]cod[Ô]) = txtCod.Text
dSet.Tables([Ô]usuario[Ô]).rows(4).Item([Ô]nome[Ô]) = txtNome.Text
dSet.Tables([Ô]usuario[Ô]).rows(4).Item([Ô]senha[Ô]) = txtSenha.Text

excluir
dSet.Tables([Ô]usuario[Ô]).rows(4).Delete

depois é so salvar o dataset em xml

Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas