LEITURA DE XML COM VB.NET
<TAG xmlns = [Ô]http://www.site.com.br[Ô]>
<OUTRATAG>
<MAISUMATAG>Texto</MAISUMATAG>
</OUTRATAG>
</TAG>
Ai quando vou referenciar a tag que eu quero fazer a leitura
oNoLista = oXML.SelectNodes([Ô]/TAG/OUTRATAG[Ô])
Ele da pal, eu acho que é por causa do comando xmlns
por que quando eu edito o xml para tirar esse comando ele lê normalmente
se alguém puder me ajudar, agradeço por que tá osso rs
Ai se eu tiro o xmlns ele lê normal =s
O único jeito de corrigir isso é adicionando um prefixo para este namespace, se o namespace é sempre o mesmo é bem simples fazer isso, se ele for diferente para cada XML pode ser meio complicado.
Assumindo que você está usando o XmlDocument e que sua variável se chame oXML ficaria mais ou menos assim
Dim nm as New XmlNamespaceManager(oXML.NameTable)
nm.AddNamespace([Ô]ab[Ô],[Ô]http://www.site.com.br[Ô])
oNoLista = oXML.SelectNodes([Ô]/ab:TAG/ab:OUTRATAG[Ô], nm)
No caso ali o [Ô]ab[Ô] pode ser o nome que você quiser, você vai ter que usar o mesmo que colocar ali para identificar os elementos no XPath
Citação::
Já tentou usar serialização? Não veja XML como um arquivo texto qualquer, ele é um arquivo de dados, mais ou menos como um MDB e o melhor jeito de lê-lo, é usando serialização
Desculpa mais não conheço serialização poderia me dar uma ideia como funciona ?
Citação::
Quando um documento tem um namespace do xml ele passa a ser um elemento diferente, só que o SelectNodes vai considerar qualquer elemento sem um prefixo como tendo namespace vazio, por isso ele não retorna nada.
O único jeito de corrigir isso é adicionando um prefixo para este namespace, se o namespace é sempre o mesmo é bem simples fazer isso, se ele for diferente para cada XML pode ser meio complicado.
Assumindo que você está usando o XmlDocument e que sua variável se chame oXML ficaria mais ou menos assimDim nm as New XmlNamespaceManager(oXML.NameTable)
nm.AddNamespace([Ô]ab[Ô],[Ô]http://www.site.com.br[Ô])
oNoLista = oXML.SelectNodes([Ô]/ab:TAG/ab:OUTRATAG[Ô], nm)
No caso ali o [Ô]ab[Ô] pode ser o nome que você quiser, você vai ter que usar o mesmo que colocar ali para identificar os elementos no XPath
Cara Pelo o que eu entendi eu trocaria o endereço por qualquer outra coisa certo ?
Só que o problema que eu identifiquei foi que o xmlns trava a leitura do arquivo não sei por que
Citação:Desculpa mais não conheço serialização poderia me dar uma ideia como funciona ?
Várias opções...
O que acontece é que quando existe um xmlns (namespace xml) é necessário um prefixo para o nome da tag ou o SelectNodes não consegue encontrar ela, e o prefixo é usado na forma de prefixo:nomeDaTag
Nas 3 linhas do meu exemplo o que eu faço é criar um objeto do tipo NamespaceManager
Adicionar um prefixo para o xmlns que veio no xml, sendo que no caso eu já sei que o xmlns é [Ô]http://www.site.com.br[Ô], então eu adiciono um prefixo para ele chamado [Ô]ab[Ô], este [Ô]ab[Ô] pode ser qualquer nome que eu quiser, porém ele é importante para o próximo passo
Por ultimo na hora de chamar o SelectNode eu mudo o XPath de [Ô]/TAG/OUTRATAG[Ô] para incluir o prefixo, ficando [Ô]/ab:TAG/ab:OUTRATAG[Ô], sendo que o prefixo aqui tem que ser o mesmo que foi definido no NamespaceManager
Citação::
Não, o endereço deve ser o mesmo que vem no xml
O que acontece é que quando existe um xmlns (namespace xml) é necessário um prefixo para o nome da tag ou o SelectNodes não consegue encontrar ela, e o prefixo é usado na forma de prefixo:nomeDaTag
Nas 3 linhas do meu exemplo o que eu faço é criar um objeto do tipo NamespaceManager
Adicionar um prefixo para o xmlns que veio no xml, sendo que no caso eu já sei que o xmlns é [Ô]http://www.site.com.br[Ô], então eu adiciono um prefixo para ele chamado [Ô]ab[Ô], este [Ô]ab[Ô] pode ser qualquer nome que eu quiser, porém ele é importante para o próximo passo
Por ultimo na hora de chamar o SelectNode eu mudo o XPath de [Ô]/TAG/OUTRATAG[Ô] para incluir o prefixo, ficando [Ô]/ab:TAG/ab:OUTRATAG[Ô], sendo que o prefixo aqui tem que ser o mesmo que foi definido no NamespaceManager
Entendi, Obrigado xD