Falta o elemento raiz

estou a ler xml a partir do URL xxx, mas estou a obter um erro porque falta o elemento Root.

O meu código para ler a resposta xml é o seguinte:

  XmlDocument doc = new XmlDocument();
  doc.Load("URL from which i am reading xml");
  XmlNodeList nodes = doc.GetElementsByTagName("Product");
  XmlNode node = null;
  foreach (XmlNode n in nodes)
   {
   }

e a resposta xml é a seguinte:

<All_Products>
   <Product>
  <ProductCode>GFT</ProductCode>
  <ProductName>Gift Certificate</ProductName>
  <ProductDescriptionShort>Give the perfect gift. </ProductDescriptionShort>
  <ProductDescription>Give the perfect gift.</ProductDescription>
  <ProductNameShort>Gift Certificate</ProductNameShort> 
  <FreeShippingItem>Y</FreeShippingItem>
  <ProductPrice>55.0000</ProductPrice>
  <TaxableProduct>Y</TaxableProduct>
   </Product>    
 </All_Products>
Pode dizer-me onde é que eu estou a ir mal?

Author: psubsee2003, 2012-04-12

6 answers

Isto é estranho, mas tenta uma vez.
  1. Leia o conteúdo do ficheiro num texto
  2. imprime o texto e verifica se está a obter o XML adequado ou não
  3. pode usar XMLDocument.LoadXML(xmlstring)

Tento com o seu código e o mesmo XML sem adicionar nenhuma declaração XML que funcione para mim

XmlDocument doc = new XmlDocument();
        doc.Load(@"H:\WorkSpace\C#\TestDemos\TestDemos\XMLFile1.xml");
        XmlNodeList nodes = doc.GetElementsByTagName("Product");
        XmlNode node = null;
        foreach (XmlNode n in nodes)
        {
            Console.WriteLine("HI");
        }
Está a funcionar perfeitamente bem.
 3
Author: Raghuveer, 2012-04-12 14:44:20
Só para o caso de mais alguém vir do Google, fui mordido por esta mensagem de erro ao usar o XDocument.Método de carga (fluxo).
XDocument xDoc = XDocument.Load(xmlStream);  

Certifique-se de que a posição do fluxo está definida para 0 (zero) antes de tentar carregar o fluxo, é um erro fácil que eu sempre ignoro!

if (xmlStream.Position > 0)
{
    xmlStream.Position = 0;
}
XDocument xDoc = XDocument.Load(xmlStream); 
 70
Author: Phil, 2014-05-20 10:26:01

Certifique-se que o XML se parece com isto:

<?xml version="1.0" encoding="utf-8"?>
<rootElement>
...
</rootElement>

Também, um ficheiro XML em branco irá devolver os mesmos elementos de raiz que faltam à excepção. Cada arquivo XML deve ter um elemento de raiz / nó que envolve todos os outros elementos.

 13
Author: coder, 2012-04-12 14:42:37

Se estiver a carregar o ficheiro XML a partir de um local remoto, eu verificaria se o ficheiro está a ser transferido correctamente, usando um sniffer como Fiddler .

Eu escrevi um aplicativo de consola rápida para executar o seu código e analisar o arquivo e ele funciona bem para mim.
 3
Author: Tom Hazel, 2012-04-12 14:44:14
  1. Verifica as árvores.ficheiro de configuração que se localizou na pasta de configuração... às vezes (eu não sei por que) este arquivo ficou vazio como alguém apagar o conteúdo dentro... mantenha a cópia de segurança deste ficheiro no seu pc local, em seguida, quando este erro aparecer - substitua o ficheiro do servidor pelo seu ficheiro local. Isto é o que eu faço quando este erro aconteceu.

  2. Verifique o espaço disponível no servidor. às vezes, o problema é este.

Boa sorte.
 1
Author: Idoshin, 2016-03-15 08:26:04

Tive o mesmo problema quando tentei ler xml que foi extraído do arquivo para fluxo de memória.

 MemoryStream SubSetupStream = new MemoryStream();
        using (ZipFile archive = ZipFile.Read(zipPath))
        {
            archive.Password = "SomePass";
            foreach  (ZipEntry file in archive)
            {
                file.Extract(SubSetupStream);
            }
        }

O problema estava nestas linhas:

XmlDocument doc = new XmlDocument();
    doc.Load(SubSetupStream);

E a solução é (graças a @Phil):

        if (SubSetupStream.Position>0)
        {
            SubSetupStream.Position = 0;
        }
 1
Author: Dmitry Potapov, 2020-04-07 12:35:31