获取xml节点值c#

本文关键字:节点 xml 获取 | 更新日期: 2023-09-27 18:19:20

让我们把下面的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;
                }

等待您的解决方案

获取xml节点值c#

XML输入不符合预期(它是"空") 并且在XDocument.Load(或XDocument.Parse等)期间发生异常。

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

下面是一些可以在LINQPad中作为c#语句运行的最小代码。我对它进行了修改,使其能够很好地显示dump。请注意,将按照预期运行。

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

也许您的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();