• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Nazgulled

Desenvolver um parser de XML (em C#) - Ideia maluca?

9 mensagens neste tópico

Gostava que me ajudassem a perceber se isto é uma ideia maluca e estou a perder o meu tempo ou se deveria ir em frente... Mas algo me diz que vou desistir.

Basicamente, estou com ideias (e até já comecei) em desenvolver um parser em C# para ficheiros XML, que me permita ler e escrever um XML. Mas a ideia é mais complexa do que o que parece... O que eu queria fazer era criar um conjunto de métodos que sejam o mais simples possíveis para ler/escrever no XML mas cada vez mais estou a ver isto demasiado difícil. A ideia era ter um simples método com um par de argumentos (e não muitos) para sacar um valor do XML (no caso da leitura), mas dependendo da complexidade do XML, isto pode ser complicado.

Por exemplo, imagine-se o seguinte XML:

<root>
  <section1>
    <element1>aaa</element1>
<element2>bbb</element2>
<element3>ccc</element3>
  </section1>
  <section2>
    <element1>aaa</element1>
<element2>bbb</element2>
  </section2>
</root>

Processar uma coisa do género não é difícil e consegue-se fazer isto bem criando uma API simples de usar. O problema é quando XML é mais complexo:

<root>
  <section1>
    <element1>aaa</element1>
<element2>bbb</element2>
<element3>ccc</element3>
  </section1>
  <section2 attr1="xyz" attr2="abc">
    <element1>
  <subelement1>
    <subsubelement1>
    </subsubelement1>
	<subsubelement2>
	  <tag1 attr1="xyz" attr2="abc" />
	  <tag2 attr1="lol" attr2="rotfl" />
	  <tag3 attr1="123" attr2="452">
	    <subtag1>Olá Mundo</subtag1>
	    <subtag2>Xau Mundo</subtag2>
	  </tag3>
	</subsubelement2>
  </subelement1>
</element1>
  </section2>
</root>

E isto digamos que é apenas um nível 2 de complexidade quem um XML pode ter. Todos sabem que existem XMLs bastante mais complexos e eu não quero entrar por ai, para a discussão em questão imagine-se que um XML não fica mais confuso que o último exemplo dado.

Supondo agora que eu queria sacar o valor da subtag1, o attr2 tag2, attr1 da section2 e por ai fora... Basicamente queria fazer um parser global, que funcionasse para todos estes casos mas de uma forma bem simples (refiro-me à API, internamente não precisa de ser muito simples, desde que funcione bem). Ou seja, um método com o nome do elemento e depois do atributo ou do conteúdo e pronto ficava por ai. Mas sem fazer coisas que considero estúpidas, por exemplo, passar um caminho absoluto para uma expressão a ser usado com XPath. Isto não teria lógica, a ideia é simplificar e o utilizador que vai usar este parser deve-se preocupar o menos possível com toda a hierarquia do ficheiro XML.

Acham que estou a perder tempo com algo que não vale a pena? Será que têm ideias/sugestões/comentários/whatever, que me possam ajudar ou fazer mudar de ideias?

Não sei bem explicar exactamente aquilo que tenho na minha mente, mas espero que o que acabei de escrever seja suficiente...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que estás a perder o teu tempo! A API do .NET já trás um parser de XML - nunca testei a leitura mas a parte de escrita é fácil de usar.

Mas se estás a fazer isto para aprender então força nisso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não não trás um parser de XML, não da maneira que eu estou a falar. Desculpa lá mas não lês-te o meu post com atenção. Eu estou a usar tudo aquilo que o .NET me oferece para trabalhar com ficheiros XML para tentar criar algo muito mais simplificado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

aconselho-te a "estudares" bem as API's do .net para XML.

quanto a pesquisas/extracção em documentos XML, usa o XPATH Queries.  (google it)

pessoalmente penso que estás a re-inventar a roda...

/ing

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Digo-te o mesmo que disse ao Triton, não percebeste o meu post.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nazgulled não é por nada mas eles tem razão mais ou menos o que dizem.

Tipo fazer uma função que busca o valor de um dado nodo, por exemplo subtag1 como referiste em cima.

Presumindo que já tens o XmlDocument carregado do ficheiro.

public String GetNodeValue(String nodeName) {
   XmlNode n = documento.SelectSingleNode("//" + nodeName);
   if (n != null)
      return n.Value;
   
   return null;
}

Isto presumindo que se quer obter o 1º nodo com esse nome. Também é igualmente fácil fazer antes a devolver a lista do conteúdo de todos os nodos com esse nome.

Mas percebo o que queres dizer. Acho que é uma tarefa aliciante para aprendizagem e prática da linguagem. Se calhar para ser mais aliciante seria fazer algo pro LINQ para ficheiros XML a simular um pouco o uso do HaXML. Seria um desafio porreiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não têm razão nenhuma porque nenhum de vocês percebeu o que eu quis dizer... O código que apresentaste aqui é o que eu já tenho (parecido), but that's not the point!

Esqueçam este tópico, não vale a pena discutir isto se não entendem onde quero chegar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se não conseguiram entender o que pretendes talvez seja melhor explicares com outras palavras em vez de insistires para que leiam um texto que, até tu, dizes que não perceberam. Explica-te melhor para que te entendam melhor.

Quanto a criares um parser C#, na verdade não sei como anda o universo de parsers em C#, se for como o de Java, então o que queres fazer já deve estar feito. Em C# usei apenas a API que o .net oferece e nunca procurei outra API.

Cheguei a criar algo parecido com o que pretendes, mas a verdade é que uma forma mais simples de ler/escrever XML não é mais do que um wrapper em torno do que existe, isto é, a ideia não é maluca, é algo que penso que qualquer programador que use XML acaba por fazer, agarrar num parser que existe e encapsular os seus métodos em apenas um ou dois métodos de leitura e escrita, talvez mais um para pesquisa simples. Mas isso acabei também por concluir que isso já existia feito, embora a quantidade de parsers seja tanta e com capacidades tão variadas, apanhei parsers que tinham uma API bastante simples, mas que não tinham as funcionalidades que pretendia.

Resumindo, a tua ideia é uma ideia muito natural quando estamos a trabalhar com XML, especialmente se estivermos a usar um parser SAX e não DOM, e pensamos que aquilo até podia ser mais simples, normalmente acabamos por encapsular uma lógica nossa num método de leitura e criamos assim uma segunda API mais simples de usar. Isto acontece de forma repetida pelo que ter uma API que nos oferecesse essa facilidade logo de início seria bom.

Tens de verificar se não existe já um qualquer parser em C# que faça isso, ou que faça da forma que queres para não estares a reinventar a roda, e a perder tempo que podias usar noutros projectos, se não encontrares nenhum que cumpra os requisitos que pretendes avança com a ideia, mas vais ter de aprender muito sobre XML e as tecnologias associadas, porque criares um parser com uma API simples mas que não ofereça as capacidades mais comuns dos parsers existentes vai fazer com que o projecto acabe a ser usado apenas por ti.

Talvez a ideia não seja criares algo de raiz mas construires em cima de algum parser que exista.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me consigo explicar melhor do que o que fiz no primeiro post, se as pessoas não percebem, paciência. Se não percebem, não se discute este assunto e pronto. Não posso fazer nada, não sei explicar melhor aquilo que pretendo.

Quanto aos parsers em C#, se calhar não usei bem as palavras, mas tu percebeste mais ou menos aquilo que eu quero fazer (terceiro paragrafo teu), ou seja, um wrapper para trabalhar com o XmlDocument do C# (por exemplo). Criar um conjunto de métodos que me facilite a escrita/leitura em ficheiros XML.

Sim, é capaz de já existir isto que eu pretendo fazer e ate era melhor porque eu não queria perder tempo a escrever isto. Mas eu postei isto aqui porque apenas comecei a programar este "parser" porque não encontrei nenhum depois de pesquisar umas horas no google. Ainda à procura por um DLL (se tivesse código fonte ou não era indiferente, desde que fizesse o que eu pretendia) que desse para eu usar em C# e ler/escrever em XML de forma simples. Mas não encontrei nada.

Quer dizer, encontrei um mas não gostei:

1) É um DLL de 4Mb pois é um pacote de bibliotecas basicamente e eu queria algo mais pequeno/simplificado.

2) Apesar de dizer que é freeware em todo o lado, instalei e aquilo diz que só funciona durante 30 dias, depois tenho de ter uma chave para colocar no código ou deixa de funcionar.

3) Tive a ler a documentação da coisa e pareceu-me complexo de mais para aquilo que eu pretendo.

Se encontrarem algum, força... Até agradeço e poupam-me trabalho, o que eu queria... Mas eu já procurei bastante e não consegui encontrar nada!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora