XML como Banco de Dados

28/10/2009

Amigos,     Gostaria de Conhecer um pouco mais sobre o XML utilizando este como Banco de Dados,   Minha necessidade é   Gostaria de em alguns exemplos mais simples, não utilizar um banco de dados access. (Mais Simples).   Gostaria de  Criar o Arquivo, Incluir Dados, Excluir, Alterar e especialmente realizar as Consultas.     POdem me ajudar com algum artigo,   ou exemplo Pronto,     grato pela ajuda!        
Fernando Reis

Fernando Reis

Curtidas 0

Respostas

Luiz Maia

Luiz Maia

28/10/2009

Ola Fernando, tudo bom?   Segue um pequeno exemplo, mas completo de como usar XML no armazenamento de dados.   Primeiramente para usarmos a função temos que importar o namespace: using System.Xml; O próximo passo para manipularmos um documento XML é carregarmos ele em memória. Para isso podemos utilizar a classe XmlDocument. EXEMPLO DE XML 10
Frederico da Silva
25
Gerente Para carregar o Xml que está em um arquivo fisico “Artigo_XML.xml” utilizamos o método Load(arquivo.xml). Criação do Arquivo xml: string caminho = @”C:\Artigo_XML.xml”; if (!File.Exists(caminho))
{
XmlDocument doc = new XmlDocument();
XmlNode raiz = doc.CreateElement(“empresa”);
doc.AppendChild(raiz);
doc.Save(caminho);
} Se o arquivo não existir ele cria o arquivo xml, sendo necessário a inserção de um elemento Root neste exemplo
representado pelo elemento “empresa”. Inserir Registro: Depois de criado precisamos muitas vezes inserir as informações no arquivo xml já existente, com isso precisamos inserir novos elementos utilizando o Método AppendChild. XmlDocument doc = new XmlDocument(); string caminho = @”C:\Artigo_XML.xml”; doc.Load(caminho); XmlNode linha = doc.CreateElement(“funcionario”); XmlNode Id = doc.CreateElement(“id”);
XmlNode Nome = doc.CreateElement(“nome”);
XmlNode Idade = doc.CreateElement(“idade”);
XmlNode Cargo = doc.CreateElement(“cargo”); Id.InnerText = “11″;
Nome.InnerText = “Mario da Silva”;
Idade.InnerText = “35″;
Cargo.InnerText = “Financeiro”; linha.AppendChild(Id);
linha.AppendChild(Nome);
linha.AppendChild(Idade);
linha.AppendChild(Cargo); doc.SelectSingleNode(“/empresa”).AppendChild(linha); doc.Save(caminho); Alterar Registro: Para a alteração de um elemento do xml podemos utilizar: XmlDocument doc = new XmlDocument(); string caminho = @”C:\Artigo_XML.xml”; doc.Load(caminho);
XmlNode no;
no = doc.SelectSingleNode(String.Format(“/empresa/funcionario[id=]“, 10));
no.SelectSingleNode(“./cargo”).InnerText = “Gerente Administrativo”;
doc.Save(caminho); Altera as informações do Funcionário Frederico da Silva baseado no seu id. Deletar Registro: Para Deletar um elemento do xml baseado em uma condição podemos utilizar: XmlDocument doc = new XmlDocument(); string caminho = @”C:\Artigo_XML.xml”; doc.Load(caminho); foreach (XmlNode no in doc.DocumentElement.ChildNodes)
{
if (int.Parse(no.ChildNodes.Item(0).InnerText) == 10)
{
doc.DocumentElement.RemoveChild(no);
doc.Save(caminho);
return;
}
}   Com este exemplo acima, vc já é capaz de gerar sua Base de Dados baseada em XML. Caso precise de mais algo, me diga que providencio para vc, ok?   Abraços Att Luiz Maia
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

Grato Luis. Como faço para selecionar um Registro? e por exemplo colocar os dados em textbox???? Fiquei um pouco em dúvida quanto a criação do arquivo XML de exemplo que mostrou. poderia expelicar um pouco mais!   grato      
GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

De uma olhada neste outro artigo, um pouco mais complexo, mas porem completo:   Olhando para o passado, 5 ou 7 anos atrás, podemos ver como as ferramentas para desenvolvimento de software evoluíram. Basta comparar o tempo que era gasto para realizar uma tarefa simples como tratar arquivos XML com o tempo que se gasta hoje para se ter uma idéia; citei o exemplo dos arquivos XML porque eles serão o foco deste artigo. Particularmente a plataforma .NET evoluiu muito e atualmente apresenta uma nova suíte de APIs para XML construídas com base nos padrões DOM, XPath, XSD e XSLT. As classes XML da plataforma .NET oferecem um desempenho muito bom e possuem um modelo de programação bem familiar que estão vinculadas às APIs de acesso a dados ADO .NET. As classes XmlWriter, XmlReader e XmlNavigator e as classes que derivam dela, incluindo XMLTextReader e XMLTextWriter encapsulam um número de funcionalidades que permitem um grande aumento de desempenho e produtividade substituindo tarefas que antes tinham que ser construídas manualmente e com muito trabalho. Neste artigo eu vou mostrar como gerenciar arquivos XML realizando operações de seleção, inclusão, alteração e exclusão de informações em arquivos XML usando as novas funcionalidades da plataforma .NET com a linguagem C#. Para acompanhar o exemplo deste artigo você pode usar o Visual Web Developer 2008 Express Edition ou o Visual Studio 2008. Definição de requisitos, leiaute e configuração Vou iniciar apresentando o leiaute do formulário web principal do nosso web site representado pela página Default.aspx: Figura 1.0 - leiaute da página Default.aspx Temos aqui um formulário web simples contendo os seguintes controles: Image : ID=image1  ImageUrl=~/imagens/pessoa.gif TextBox :  TextBox1, TextBox2 e TextBox3 com TextMode=Multiline Button : ID= btnIncluir, ID=btnAlterar ID=btnExcluir e ID=btnLimpar GridView: ID= GrdiView1 , AutoGenerateColumns=False , AllowPaging=True O GridView apresenta as seguintes definições para os campos: Autor, Titulo e Conteudo; Figura 2.0 - Definições para os campos gerenciados O objetivo é gerenciar informações sobre poesias como autor, título e conteúdo permitindo a seleção, inclusão, alteração e exclusão de informações. Nota: No exemplo eu estou tratando poemas de autoria do famoso poeta Fernando Pessoa. Efetuar tal tarefa usando um banco de dados com os recursos do ASP .NET é uma tarefa simples e você têm a sua disposição uma suíte de ferramentas e opções como ADO .NET, SQLDataSource, ObjectDataSource, LINQ , etc. que lhe permitem tratar o caso de diversas formas. A novidade é que vamos gerenciar estas informações a partir de um arquivo xml chamado poemas.xml que esta na pasta App_Data e que contém a seguinte estrutura: <?xml version="1.0" encoding="utf-8"?> <poetas> <poemas> <autor></autor> <titulo></titulo> <conteudo></conteudo> </poemas> <poemas> </poetas> Vamos então mostrar como usar os recursos da plataforma .NET para efetuar a manutenção das informações do arquivo poemas.xml realizando operações de seleção, inclusão, alteração e exclusão de dados. Vamos iniciar abrindo o VWD 2008 Express e criando um novo web site a partir do menu File->New web site; Em Templates selecione ASP .NET Web Site, escolha a linguagem C# e informe o nome manuXML para o web site clicando em OK; Agora vamos criar a pasta App_Data em nosso projeto clicando com o botão direito do mouse sobre o nome do web site e selecionando a Add ASP .NET Folder => App_Data; Em seguida vamos criar o arquivo xml poemas.xml na pasta App_Data clicando com o botão direito sobre a pasta e selecionando Add New Item; A seguir informe o nome poemas.xml e clique em Add; Defina a estrutura do arquivo conforme já mostramos <?xml version="1.0" encoding="utf-8"?> <poetas> <poemas> <autor></autor> <titulo></titulo> <conteudo></conteudo> </poemas> <poemas> </poetas> Agora vamos criar o leiaute do formulário web conforme o leiaute e definições da figura 1.0 (Figura 1.0 - leiaute da página Default.aspx) e figura 2.0 mostradas anteriormente. Já temos tudo pronto: o leiaute e as definições da página Default.aspx e o arquivo poemas.xml. Gerenciando informações em arquivos XML Vamos iniciar definindo o código do evento Load da página Default.aspx que deverá carregar os dados do arquivo poemas.xml e preencher o GridView  conforme a figura abaixo: Nota:  Especifique a diretiva using no espaço para nome System.Xml para que não seja necessário qualificar declarações código:  using System.Xml; Carregando dados Temos abaixo o código do evento Load: protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { carregaDadosXML(); this.Session["Incluir"] = 0; } } Eu defini uma variável de sessão Incluir e atribui um valor inicial igual a 0. Essa variável irá controlar a inclusão de dados. Veremos abaixo o porque desta definição. A rotina carregaDadosXML() é quem vai acessar o arquivo poemas.xml e carregar o GridView, vejamos o seu código abaixo: /// <summary> /// carrega os dados xml /// </summary> private void carregaDadosXML() { DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath(@"App_Data\poemas.xml")); if (ds.Tables.Count > 0) { this.GridView1.DataSource = ds; this.GridView1.DataBind(); } } Como pretendemos gerenciar os dados do arquivo xml devemos criar uma estrutura em memória com as informações do arquivo poemas.xml. Fazemos isso criando um objeto DataSet e em seguida usando o método ReadXML() que para ler o conteúdo do arquivo na pasta App_Data. Nota:  O método ReadXML possui diversas sobrecargas. Veja detalhes em: http://msdn.microsoft.com/pt-br/library/system.data.dataset.readxml.aspx Poderíamos criar uma instância de um objeto XmlTextReader e preenchê-lo com o arquivo XML. Normalmente, a classe XmlTextReader é usada quando é necessário acessar o XML como dados brutos, sem a sobrecarga de um DOM. Dessa maneira, a classe XmlTextReader fornece um mecanismo mais rápido para leitura de XML.  A classe XmlTextReader possui construtores diferentes para especificar a localização dos dados XML. O código a seguir cria uma instância da classe XmlTextReader e carrega o arquivo poemas.xml. XmlTextReader reader = new XmlTextReader ("App_Data\poemas.xml"); Após criar o objeto XmlTextReader, use o método Read para ler os dados XML. O método Read continua se movendo pelo arquivo XML seqüencialmente até atingir o final do arquivo, onde o método Read retornará um valor "False." while (reader.Read())
{
    Console.WriteLine(reader.Name);
}
Console.ReadLine();
Em seguida verificamos e o dataset foi preenchido e exibimos o resultado no GridView. Limpando o formulário Vamos mostrar agora o código associado ao evento Click do botão Limpar: protected void btnLimpar_Click(object sender, EventArgs e) { this.TextBox1.Text = ""; this.TextBox2.Text = ""; this.TextBox3.Text = ""; this.TextBox1.Text = "NOVO"; this.TextBox1.Focus(); Session["Incluir"] = 1; } Este código apenas limpa o conteúdo das caixas de texto do formulário web. Lembre-se que eu defini uma variável de sessão chamada Incluir no evento Load e atribui um valor inicial zero. Ao limpar o conteúdo das caixas de texto eu estou alterando o seu valor para 1. Dessa forma eu posso controlar a inclusão da seguinte forma. O usuário somente poderá incluir valores após limpar as caixas de texto ou seja quando o valor da variável de sessão Incluir for igual a 1. Se o usuário tentar incluir uma informação irá receber uma mensagem solicitando que os campos sejam limpos. Incluindo dados Vejamos então o código do evento Click do botão Incluir: protected void btnIncluir_Click(object sender, EventArgs e) { if ((int)Session["Incluir"] == 1) { if (TextBox1.Text.Equals("") || TextBox2.Text.Equals("") || TextBox3.Text.Equals("")) { this.RegisterClientScriptBlock("alertmessage", "<script>alert('Preencha os campos do formulário.')</script>"); } else { //define um documento XML e carrega o seu conteúdo XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(Server.MapPath(@"App_Data\poemas.xml")); //Cria um novo elemento poemas e define os elementos autor, titulo e conteudo XmlElement novoelemento = xmldoc.CreateElement("poemas"); XmlElement xmlAutor = xmldoc.CreateElement("autor"); XmlElement xmlTitulo = xmldoc.CreateElement("titulo"); XmlElement xmlConteudo = xmldoc.CreateElement("conteudo"); //atribui o conteúdo das caixa de texto aos elementos xml xmlAutor.InnerText = this.TextBox1.Text.Trim(); xmlTitulo.InnerText = this.TextBox2.Text.Trim(); xmlConteudo.InnerText = this.TextBox3.Text.Trim(); //inclui os novos elementos no elemento poemas novoelemento.AppendChild(xmlAutor); novoelemento.AppendChild(xmlTitulo); novoelemento.AppendChild(xmlConteudo); //inclui o novo elemento no XML xmldoc.DocumentElement.AppendChild(novoelemento); //Salva a inclusão no arquivo XML xmldoc.Save(Server.MapPath(@"App_Data\poemas.xml")); this.Session["Incluir"] = 0; //exibe os dados no GridView carregaDadosXML(); } } else { this.RegisterClientScriptBlock("alertmessage", "<script>alert('Limpe os campos do formulário para incluir um novo item.')</script>"); } } Primeiro verificamos se a nossa variável de sessão Incluir tem o valor 1. Se o valor for diferente exibiremos a mensagem : 'Limpe os campos do formulário para incluir um novo item'. this.RegisterClientScriptBlock("alertmessage", "<script>alert('Limpe os campos do formulário para incluir um novo item.')</script>"); Estamos fazendo isso usando o método RegisterClientScriptBlock que permite que você coloque uma função JavaScript no topo da página. A partir da ASP.NET 2.0 usa a nova propriedade Page.ClientScript para registrar e colocar funções JavaScript em suas páginas ASP.NET, os métodos Page.RegisterStartUpScript e Page.RegisterClientScriptBloc da versão 1.0/1.1 da plataforma .NET podem ser considerados obsoletos pois agora você tem que fornecer o conjunto de parâmetros chave/script para registrar scripts do lado do cliente. Para detalhes veja o meu artigo:   ASP.NET - Messagebox Em seguida usamos o mesmo recurso para exibir uma mensagem ao usuário caso as caixas de textos não forem preenchidas. this.RegisterClientScriptBlock("alertmessage", "<script>alert('Preencha os campos do formulário.')</script>"); Satisfeitas estes critérios começamos o processo de inclusão de uma nova informação no arquivo poemas.xml. Estamos criando uma instância da classe XmlDocument que representa o documento XML e contém um método Load para carregar o documento a partir de um arquivo, fluxo ou XmlReader.                 XmlDocument xmldoc = new XmlDocument();
                xmldoc.Load(Server.MapPath(@"App_Data\poemas.xml"));

A seguir criamos novos elementos usando o método CreateElement da classe XmlDocument.                 //Cria um novo nó poemas e define os elementos autor, titulo e conteudo para este nó
                XmlElement novoelemento = xmldoc.CreateElement("poemas");
                XmlElement xmlAutor = xmldoc.CreateElement("autor");
                XmlElement xmlTitulo = xmldoc.CreateElement("titulo");
                XmlElement xmlConteudo = xmldoc.CreateElement("conteudo") Embora esse método cria o novo objeto no contexto do documento, ele automaticamente não adicionar o novo objeto à árvore de documento. Para adicionar o novo objeto, você deve explicitamente chamar um dos métodos inserir do nó. A seguir estamos atribuindo os valores informados na caixa de texto aos elementos criados usando a propriedade InnerText que obtêm ou define valores concatenados do nó e todos os seus nós filhos.                 //atribui o conteúdo das caixa de texto aos elementos criados
                xmlAutor.InnerText = this.TextBox1.Text.Trim();
                xmlTitulo.InnerText = this.TextBox2.Text.Trim();
                xmlConteudo.InnerText = this.TextBox3.Text.Trim(); Agora incluímos os elementos criados ao nó poemas usando o método AppendChild que inclui um novo nó ao fim da lista de nó filhos para o nó atual.                //inclui os elementos no novo nó
                novoelemento.AppendChild(xmlAutor);
                novoelemento.AppendChild(xmlTitulo);
                novoelemento.AppendChild(xmlConteudo); Incluímos então o novo nó poemas ao nó raiz do documento XML.                 //inclui o novo elemento no XML
                xmldoc.DocumentElement.AppendChild(novoelemento); Finalmente salvamos o documento XML para o arquivo especificado e exibimos os dados no GridView. //Salva a inclusão no arquivo XML
                xmldoc.Save(Server.MapPath(@"App_Data\poemas.xml"));
                this.Session["Incluir"] = 0;
                //exibe os dados no GridView
                carregaDadosXML(); Alterando dados Veremos agora o código do evento Click do botão Alterar: protected void btnAlterar_Click(object sender, EventArgs e) { if (selectIndex == -1) { this.RegisterClientScriptBlock("alertmessage", "<script>alert('Selecione um item para alteração.')</script>"); } else { XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(Server.MapPath(@"App_Data\poemas.xml")); XmlNode xmlnode = xmldoc.DocumentElement.ChildNodes.Item(selectIndex); xmlnode["autor"].InnerText = this.TextBox1.Text.Trim(); xmlnode["titulo"].InnerText = this.TextBox2.Text.Trim(); xmlnode["conteudo"].InnerText = this.TextBox3.Text.Trim(); xmldoc.Save(Server.MapPath(@"App_Data\poemas.xml")); carregaDadosXML(); } } Aqui destacamos o uso da propriedade DocumentElement que obtêm a raiz XmlElement para o documento; e a propriedade ChildNodes que contêm uma lista de nós de todos os filhos os elementos. Estamos obtendo os valores para os elementos do índice indicado que é capturado a partir da seleção de uma linha  do controle GridView. Para obter o valor do índice definimos a propriedade selectIndex conforme o código abaixo: internal int selectIndex { get { if (this.Session["Page_selectIndex"] == null) return -1; return Int32.Parse(this.Session["Page_selectIndex"].ToString()); } set { this.Session["Page_selectIndex"] = value; } } A palavra-chave Internal é um modificador de acesso para tipos de membros que são acessíveis somente no mesmo assembly. Em C# as classes que não possuírem uma modificador de acesso, são por default internal. Com isso estamos obtendo o valor do índice selecionado a partir do controle GridView ou retornando o valor -1 e atribuindo o valor a partir da sessão. Após obter os valores das caixas de texto salvamos o XML para o documento poemas.xml:   xmldoc.Save(Server.MapPath(@"App_Data\poemas.xml")); Para obter o índice atual do GridView quando o usuário selecionar uma linha temos que definir o código abaixo no evento SelectedIndexChanged: protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { selectIndex = this.GridView1.SelectedIndex; procuraDadosXml(selectIndex); this.Session["Incluir"] = 0; } Note que chamamos a rotina procuraDadosXml(indice) passando o índice selecionado. É esta rotina que irá buscar os dados no documento poemas.xml exibindo-os nas caixas de texto do formulário. Veja o código da rotina: private void procuraDadosXml(int selectedIndex) { XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(Server.MapPath(@"App_Data\poemas.xml")); XmlNodeList xmlnodelist = xmldoc.DocumentElement.ChildNodes; XmlNode xmlnode = xmlnodelist.Item(selectedIndex); this.TextBox1.Text = xmlnode["autor"].InnerText; this.TextBox2.Text = xmlnode["titulo"].InnerText; this.TextBox3.Text = xmlnode["conteudo"].InnerText; } A classe XmlNodeList representa uma coleção ordenada de nós. Estamos obtendo a coleção de nós do documento XML e em seguida selecionando o nó referente ao índice selecionado. Quando o usuário clica no botão Alterar os novos valores são salvos para o arquivo XML:  xmldoc.Save(Server.MapPath(@"App_Data\poemas.xml")); Excluindo dados O código associado ao evento Click do botão Excluir é dado a seguir: protected void btnExcluir_Click(object sender, EventArgs e) { if (selectIndex == -1) { this.RegisterClientScriptBlock("alertmessage", "<script>alert('Selecione um item para excluir.')</script>"); } else { XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(Server.MapPath(@"App_Data\poemas.xml")); XmlNode xmlnode = xmldoc.DocumentElement.ChildNodes.Item(selectIndex); xmlnode.ParentNode.RemoveChild(xmlnode); xmldoc.Save(Server.MapPath(@"App_Data\poemas.xml")); carregaDadosXML(); this.TextBox1.Text = ""; this.TextBox2.Text = ""; this.TextBox3.Text = ""; } }   Para excluir os dados de um nó XML usamos o método RemoveChild() passando o nó desejado. Dessa forma temos a implementação de todas as rotinas necessárias para gerenciar as informações de um arquivo XML. Talvez a interface pudesse ser melhorada e um tratamento de erros decente pudesse ser implementado. Tarefas que deixo a seu cargo para exercitar o aprendizado. Veja abaixo a figura do web site em execução e a estrutura do arquivo poemas.xml após algumas inclusões: <?xml version="1.0" encoding="utf-8"?> <poetas> <poemas> <autor>Fernando Pessoa</autor> <titulo>Tabacaria</titulo> <conteudo>Não sou nada. Nunca serei nada. Não posso querer ser nada. À parte isso, tenho em mim todos os sonhos do mundo.</conteudo> </poemas> <poemas> <autor>Fernando Pessoa</autor> <titulo>poesias coligidas</titulo> <conteudo>Eu amo tudo o que foi, Tudo o que já não é, A dor que já me não dói, A antiga e errônea fé, O ontem que dor deixou, O que deixou alegria Só porque foi, e voou E hoje é já outro dia.</conteudo> </poemas> </poetas>  
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

Perfeito,     Não estava encontrando o SELECT, mas estava ali escondidinho,   Super bacana,   Este exemplo veio em hora certa preciso criar um sistema de NewsLetter e vou testar este projeto,       Uma última Pergunta,   pelo que entendi, consigo  criar um dataset e especialmente um DataReader com o arquivo XML,   ESTOU CERTO???           Grato          
GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

SIm, vc consegue transformar um XML num DataSet, e vice versa.   Abraços e qualquer coisa, estamos ai para ajudar. Att Luiz Maia
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

Obrigado pela ajuda,
GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

Blz Fernando,   Precisando estamos a sua disposição.   Abraços Att   Luiz Maia
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

Luiz,

Se puder me ajudar enste mesmo assunto agradeço.


Tenho que usar este modelo em XML

Arquivo XML

<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
  <channel>
    <item>
      <headline>Sabrosa y nutritiva</headline>
      <subhead>Descubre las cualidades de la pasta e incorpórala a tu dieta</subhead>
      <thumbtxt>Pastas: beneficios, secretos y variedades</thumbtxt>
      <copyright>Foto: StockXPert.com</copyright>
      <image url="http://blstb.msn.com/i/3F/9A74FDE90279A109547425C2F8BB.jpg" type="image/jpeg" />
      <link>http://estilodevida.latam.msn.com/articulo.aspx?cp-documentid=1</link>
    </item>
  </channel>
</rss>



Veja o Código de Inserção no ASP.NET:


//Define um novo documento XML e Carrega o seu conteúdo
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(Server.MapPath(@"App_Data\rss2infopane.xml"));

           
            //Define um novoelemento
            XmlElement novoelemento = xmlDoc.CreateElement("item");

            XmlElement xmlheadline = xmlDoc.CreateElement("headline");
            XmlElement xmlsubhead = xmlDoc.CreateElement("subhead");
            XmlElement xmlthumbtxt = xmlDoc.CreateElement("thumbtxt");
            XmlElement xmlcopyright = xmlDoc.CreateElement("copyright");
            XmlElement xmlImage = xmlDoc.CreateElement("image");
            XmlElement xmlLink = xmlDoc.CreateElement("Link");


            xmlheadline.InnerText = this.txtTitulo.Text.Trim();
            xmlsubhead.InnerText = this.txtSubtitulo.Text.Trim();
            xmlthumbtxt.InnerText = this.txtTextoMiniatura.Text.Trim();
            xmlcopyright.InnerText = this.txtCopyright.Text.Trim();


            //Arruma os atruibutos de Imagem
            XmlAttribute attrurl = xmlDoc.CreateAttribute("url");
            attrurl.Value = fuFoto.PostedFile.FileName.ToString();

            XmlAttribute attrtype = xmlDoc.CreateAttribute("type");
            attrtype.Value = fuFoto.PostedFile.ContentType.ToString();

            xmlImage.SetAttributeNode(attrurl);
            xmlImage.SetAttributeNode(attrtype);


            xmlLink.InnerText = txtLink.Text.Trim();
           
            novoelemento.AppendChild(xmlheadline);
            novoelemento.AppendChild(xmlsubhead);
            novoelemento.AppendChild(xmlthumbtxt);
            novoelemento.AppendChild(xmlcopyright);
            novoelemento.AppendChild(xmlImage);
            novoelemento.AppendChild(xmlLink);



            //xmlDoc.SelectNodes("/rss/channel");
           

            xmlDoc.DocumentElement.AppendChild(novoelemento);

            xmlDoc.Save(Server.MapPath(@"App_Data\rss2infopane.xml"));

           
           
           
            this.Session["Incluir"]=0;

            carregaDadosXML();
          



O resultado do xml fiuca desta forma:


<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
  <channel>
    <item>
      <headline>Sabrosa y nutritiva</headline>
      <subhead>Descubre las cualidades de la pasta e incorpórala a tu dieta</subhead>
      <thumbtxt>Pastas: beneficios, secretos y variedades</thumbtxt>
      <copyright>Foto: StockXPert.com</copyright>
      <image url="http://blstb.msn.com/i/3F/9A74FDE90279A109547425C2F8BB.jpg" type="image/jpeg" />
      <link>http://estilodevida.latam.msn.com/articulo.aspx?cp-documentid=1</link>
    </item>
  </channel>
  <item>
    <headline>dfsgdfg</headline>
    <subhead>sdfgdfg</subhead>
    <thumbtxt>sdfgdsfg</thumbtxt>
    <copyright>sdfgdsfgsd</copyright>
    <image url="blocklist.xml" type="text/xml" />
    <Link>fgdsf</Link>
  </item>


Ou seja  os dados não ficam dentro da tag  CHANNEL.


como posso arrumar isto?


Grato
GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

E ai Fernando, como vai?   Basta alterar o seguinte:   //xmlDoc.SelectNodes("/rss/channel"); xmlDoc.DocumentElement["channel"].AppendChild(novoelemento);   Abraços Att LUiz Maia
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

Olá Luiz,       Havia tentando esta opção e não consegui.   Olhando os tópicos abaixo, encontrei a opção  SelectSingleNode  e com ela consegui realizar a alteração.     Outra pergunta     Como viu no XML  existe um nó chamado  ITEM  e dentro deles vários.....   outro nós.   o nó   <image>  possui um atributo url  onde se encontra o endeço da imagem.     como posso fazer para receber este ATRIBUTO dentro de uma gridview?     ou seja quero que a imagem apareca no Gridview.
GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

Fernando   Fiz usando o recurso: xmlDoc.DocumentElement["channel"].AppendChild(novoelemento); E funcionou perfeitamente, tenho o projeto aqui e posso te enviar caso queira.   Quando ao gridview, por favor me explique melhor, o que vc quer fazer? Popular um gridView tendo como base de dados do DataSource este XML?   Aguardo Att Luiz Maia 
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

oi Luiz,     Manda o projeto por favor,   assim posso entender oque fiz de errado,     quanto ao gridview,  vou postar meu exemplo assim voce pode entender melhor,   Grato
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

OI Luis,     veja o exemplo simples     http://video.devmedia.com.br/discovirtual/175404/XML/mbpress.zip       este projeto possui uma grid,   e esta grid e garregada com um método carregagridXML.  só que um item é uma figura... ou eu utilizo uma colua IMAGEFILD  , ou um template field     Lembando que o Nó IMAGE tem o ATRIBUTO URL que necessito,   como trazer ele?    
GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

http://video.devmedia.com.br/discovirtual/200237/testeFernando.zip   Vc pode usar ate uma label ou image mesmo, fica a seu criterio. Caso usa uma label, esta deve ser colocada num TemplateField e vc devera usar o metodo RowDataBound para mudar a propriedade text dela tipo assim:   label.text = "<input type='image' src='url da imagem' ....>   Deu para entender? Caso contrario, posso montar um exemplo para vc, ok?   Aguardo Att Luiz Maia  
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

Luis.


Como pegar a URl da Imagem???


eu usava normalmente   o Eval(#"campo")

mas neste caso é uma propriedade do campo  como fica???

GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

oi,


Quanto ao exemplo que me mandou entendi onde estava o erro


ao inves de  ["channel"]  eu usei ("channel")

BOBEIRA.

minha antigas lembranças do VB.net.




kkk


GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

É so usar o XmlAttribute, ao inves do XMLElement.   Luiz Maia
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

pode me ajudar com um exemplo, ?
GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

De uma olhada neste exemplo:   XML:   <xml>
<test attrib1="hello" attrib2="world">textValue</test>
</xml>   Codigo:   XmlElement test = (XmlElement)doc.SelectSingleNode("/xml/test");
string attrib1 = test.Attributes["attrib1"].Value;
string attrib2 = test.Attributes["attrib2"].Value;
string textValue = test.FirstChild.Value;

ou
XmlElement test = (XmlElement)doc.SelectSingleNode("/xml/test");
string attrib1 = doc.SelectSingleNode("/xml/test/@attrib1").Value;
string attrib2 = doc.SelectSingleNode("/xml/test/@attrib2").Value;
string textValue = doc.SelectSingleNode("/xml/test/text()").Value;   Aguardo Att Luiz Maia
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

Desculpe Luis,     Podemos voltar,   minha maior duvida, é quanto ao preenchimento da grid,   POde me ajudar com isto!
GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

Fernando,   Para popular a grid com o valor do atributo do XML basta usar os recursos que te passei abaixo, dentro do RowDataBound.   Caso não consiga, posso abrir uma exceção e fazer o codigo para vc, mas preciso de um favor seu, monte um projeto pequeno com o que quer e me mande o zip, assim faço funcionar e te mando novamente, pode ser? POr favor não me mande o projeto inteiro, com base de dados e ect.... pois assim demoro muito tempo para fazer a instancia e corrigir erros de compilação.   Faça uma pagina aspx, com a grid que quer e o XML. Explique os campos que quer que sejam expostos na grid, ok?   Aguardo Abraços   Att Luiz Maia
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

Luis

veja um exemplo abaixo bem simples,   Como pediu

http://video.devmedia.com.br/discovirtual/175404/XML/mbpress.zip  

Grato

GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

Fernando,   Estou analisando e jaja te mando a solução.   Abraços Att Luiz Maia
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

Ok luis, Grato
GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

Fernando,   Não entendi muito bem se é isto mesmo, para mim funcionou. Apareceu na grid a imagem. De uma olhada no projeto:   ttp://video.devmedia.com.br/discovirtual/200237/mbpress.zip   Abraços Att LUiz Maia
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

Obrigado,   Por enquanto resolveu,   Estou com algumas outras dúvida,   mas falo em breve   Grato
GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

Blz, Fernando.
Abraços e continuamos a sua disposição, ok?   Ate mais... Att Luiz Maia
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

Luis,


Pode ma ajudar por favor,


tenho o mesmo aplicatico,

agora não consigo popular o dataset apõs a leitura do XML

http://video.devmedia.com.br/discovirtual/175404/Famosidades-xml.zip


Veja o Exemplo de Excluir no grid,

ele não traz o DataSet que deveria estar em memória


Grato
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

Veja o Código:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            this.Session["Fotos"] = null;
                                  
            if(System.IO.File.Exists(Server.MapPath(@"xml\rss2infopane.xml")))
            {

                //Instancia um novo DataSet
                System.Data.DataSet dsXML = new System.Data.DataSet();
               
                //Le o XML para o DataSet
                dsXML.ReadXml(Server.MapPath(@"xml\rss2infopane.xml"));


                try
                {
                    int intXML = dsXML.Tables[2].Rows.Count;

                    if (intXML > 0)
                    {

                        System.Data.DataSet ds = new System.Data.DataSet();
                        ds = GetDataSet();

                        for (int i = 0; i < intXML; i++)
                        {
                            System.Data.DataRow row = ds.Tables[0].NewRow();
                            row["id"] = (i+1).ToString();
                            row["headline"] = dsXML.Tables[2].Rows[i]["headline"].ToString();
                            row["subhead"] = dsXML.Tables[2].Rows[i]["subhead"].ToString();
                            row["thumbtxt"] = dsXML.Tables[2].Rows[i]["thumbtxt"].ToString();
                            row["copyright"] = dsXML.Tables[2].Rows[i]["copyright"].ToString();
                            row["image"] = dsXML.Tables[3].Rows[i]["url"];
                            row["link"] = dsXML.Tables[2].Rows[i]["link"].ToString();
                            ds.Tables[0].Rows.Add(row);
                           

                        }

                       // aqui a Session nâo mantem o DATASET,
                        this.Session["Fotos"] = ds.Tables[0];
                        gvFoto.DataSource = ds.Tables[0];
                        gvFoto.DataBind();
                       
                    }               
                }
                catch (Exception)
                {
                    dsXML.Dispose();
                }
               
            }
            else
            {
                CriaXML();
            }

        }
    }
GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

Fernando, como assim não consegue popular? Da algum tipo de erro?     Aguardo Att Luiz Maia
GOSTEI 0
Fernando Reis

Fernando Reis

28/10/2009

oi.

Resolvi,   por aqui


POde me dizer como fazer um upload  e no Web.Config determinar qual o usuário e Senha????
do tipo

<add key="tal" value="tal">
GOSTEI 0
Luiz Maia

Luiz Maia

28/10/2009

Fernando,   Esta duvida é outro assunto e deve ser aberto outro chamado, blz?   Abraços Att Luiz Maia
GOSTEI 0
POSTAR