1

让我们将以下 xml 视为

<?xml version="1.0" encoding="UTF-8" ?>
   <response success="true">
       <struct>value</struct>
   </response>

在解析时我收到以下错误

Root element is missing.

我使用的代码是

foreach (XElement carselement in xdoc.Descendants("response"))
                {
                  String  value= carselement.Element("struct").Value;

                }

等待您的解决方案

4

2 回答 2

1

XML 输入与预期不符(它是“空的”)XDocument.Load ,并且在(或XDocument.Parse等)期间发生异常

最终xdoc 包含预期的内容——“可疑”行甚至从未运行;同样,此异常是在解析XML 时引起的,而不是在枚举/导航时引起的。这种情况应该很容易通过附加的调试器或堆栈跟踪来识别。

这是一些可以在 LINQPad 中作为 C# 语句运行的最小代码。我已经对其进行了修改,以便与转储很好地显示。请注意,它按预期运行

var xmlStr = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
   <response success=""true"">
       <struct>value</struct>
   </response>";
var xdoc = XDocument.Parse(xmlStr);
xdoc.Descendants("response")
    .Select(e => e.Element("struct").Value)
    .Dump();

以下是导致异常的方式Descendants(与其他枚举/导航无关):

var xmlStr = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>";
var xdoc = XDocument.Parse(xmlStr);
// --> XmlException: Root element is missing
于 2013-06-21T17:54:31.690 回答
0

也许您的 XML 过于简化,看起来像这样:

<!-- example -->
<?xml version="1.0" encoding="UTF-8" ?>
<response success="true">
    <struct>value1</struct>
</response>
<response success="true">
    <struct>value2</struct>
</response>
<response success="false">
    <struct>value3</struct>
</response>

在这种情况下,您缺少一个<responses></responses>环绕response元素数组的 a 。

顺便说一句,如果您的 XML 文件确实是您在此处引用的内容,您的代码也应该可以工作。您是否也尝试操作 XML?

XDocument xdoc = XDocument.Load(filePath);
if (xdoc == null) return;

XElement response = xdoc.Descendants("response").FirstOrDefault();
XElement structElement = response.Descendants("struct").FirstOrDefault();
于 2013-06-21T17:43:42.697 回答