我正在从xxx URl中读取xml,但由于缺少Root元素,我收到错误。
我读取xml响应的代码如下:
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)
{
}
并且xml响应如下:
<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>
请告诉我哪里出错了。
答案 0 :(得分:53)
万一其他人从Google登陆,我在使用XDocument.Load(Stream)方法时被此错误信息所困。
XDocument xDoc = XDocument.Load(xmlStream);
在尝试加载Stream之前,请确保将流位置设置为0(零),这是我总是忽略的一个简单错误!
if (xmlStream.Position > 0)
{
xmlStream.Position = 0;
}
XDocument xDoc = XDocument.Load(xmlStream);
答案 1 :(得分:11)
确保XML看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<rootElement>
...
</rootElement>
此外,空白XML文件将返回相同的Root元素缺少异常。每个XML文件都必须有一个根元素/节点,它包含所有其他元素。
答案 2 :(得分:2)
如果您从远程位置加载XML文件,我会使用Fiddler之类的嗅探器检查文件是否确实正在正确下载。
我写了一个快速的控制台应用程序来运行你的代码并解析文件,它对我来说很好。
答案 3 :(得分:2)
嗨这是奇怪的方式,但尝试一次
XMLDocument.LoadXML(xmlstring)
我尝试使用您的代码和相同的XML,而不添加任何适合我的XML声明
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");
}
答案 4 :(得分:1)
当我尝试读取从存档中提取的xml到内存流时,我遇到了同样的问题。
MemoryStream SubSetupStream = new MemoryStream();
using (ZipFile archive = ZipFile.Read(zipPath))
{
archive.Password = "SomePass";
foreach (ZipEntry file in archive)
{
file.Extract(SubSetupStream);
}
}
问题出在以下几行:
XmlDocument doc = new XmlDocument();
doc.Load(SubSetupStream);
解决方法是(感谢@Phil):
if (SubSetupStream.Position>0)
{
SubSetupStream.Position = 0;
}
答案 5 :(得分:0)
检查位于config文件夹中的trees.config文件... 有时(我不知道为什么)这个文件变得空洞,就像有人删除里面的内容一样...... 在本地PC中保留此文件的备份,然后出现此错误时 - 将服务器文件替换为本地文件。这是我在发生此错误时所做的事情。
检查服务器上的可用空间。有时这就是问题所在。