获取xml节点值c#

时间:2013-06-21 17:37:28

标签: c# .net xml

让我们将以下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;

                }

等待你的解决方案

2 个答案:

答案 0 :(得分:1)

XML输入不符合预期(“空”) XDocument.Load(或XDocument.Parse等期间发生异常)。

最终xdoc 确实不包含预期的内容 - 并且“可疑”行甚至不会运行;再次,这个异常是在XML被解析时引起的,而不是在它被枚举/导航时引起的。应使用attached debugger或堆栈跟踪轻松识别此方案。

这是一些可以在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

答案 1 :(得分: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

顺便说一句,如果你的XML文件真的是你在这里所引用的,那么你的代码也应该可以工作。您是否也试图操纵XML?

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

XElement response = xdoc.Descendants("response").FirstOrDefault();
XElement structElement = response.Descendants("struct").FirstOrDefault();