asp.net 缺少根元素

nwlqm0z1  于 2023-03-31  发布在  .NET
关注(0)|答案(7)|浏览(240)

我正在从xxx URL阅读XML,但由于缺少根元素,因此出现错误。
我的读取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>

你能告诉我我错在哪里吗?

w51jfk4q

w51jfk4q1#

以防其他人从Google登陆这里,我在使用XDocument.Load(Stream)方法时被这个错误消息咬了一口。

XDocument xDoc = XDocument.Load(xmlStream);

确保流位置设置为0(零),然后再尝试加载流,这是一个容易犯的错误,我总是忽略!

if (xmlStream.Position > 0)
{
    xmlStream.Position = 0;
}
XDocument xDoc = XDocument.Load(xmlStream);
camsedfj

camsedfj2#

确保你的XML看起来像这样:

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

此外,如https://landesk378.rssing.com/chan-11533214/article34.html所示-
一个空白的XML文件将返回相同的根元素缺失异常。每个XML文件必须有一个包含所有其他元素的根元素/节点。

wvyml7n5

wvyml7n53#

嗨,这是奇怪的方式,但尝试一次
1.将文件内容读入字符串
1.打印字符串并检查是否得到了正确的XML
1.可以使用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");
        }

正如Phil在下面的答案中所述,如果xmlStream位置不为零,请将其设置为零。

if (xmlStream.Position > 0)
{
    xmlStream.Position = 0;
}
XDocument xDoc = XDocument.Load(xmlStream);
nlejzf6q

nlejzf6q4#

如果从远程位置加载XML文件,我将使用Fiddler等嗅探器检查文件是否确实正确下载。
我写了一个快速的控制台应用程序来运行你的代码和解析文件,它对我来说工作得很好。

7xllpg7q

7xllpg7q5#

1.检查配置文件夹中的trees.config文件...有时(我不知道为什么)这个文件变成空的,就像有人删除里面的内容...在本地电脑中备份这个文件,然后当这个错误出现时-用本地文件替换服务器文件。这就是我在这个错误发生时所做的。
1.检查这可用空间在这服务器.有时这是问题.
祝你好运。

u5i3ibmn

u5i3ibmn6#

当我尝试读取从存档提取到内存流的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;
        }
zbsbpyhn

zbsbpyhn7#

在我的情况下,我发现应用程序设置被损坏。所以要解决它,只需删除本地appdata %appdata%/../Local/YOUR_APP_NAME中的文件夹。

相关问题