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?
6 answers
- Leia o conteúdo do ficheiro num texto
- imprime o texto e verifica se está a obter o XML adequado ou não
- 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.
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);
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.
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.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.
Verifique o espaço disponível no servidor. às vezes, o problema é este.
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;
}