c#XDocument问题

时间:2015-06-12 12:10:32

标签: c# xml linq-to-xml

我是xml-parsing的新手。

按照非常基本的教程,我尝试解析CalDav服务器返回的以下xml:

<?xml version="1.0" encoding="utf-8" ?>
<multistatus xmlns="DAV:">
 <response>
  <href>/caldav.php/icalendar.ics</href>
  <propstat>
   <prop>
    <getetag>"xxxx-xxxx-xxxx"</getetag>
   </prop>
   <status>HTTP/1.1 200 OK</status>
  </propstat>
 </response>
 <sync-token>data:,20</sync-token>
</multistatus>

现在我想找到我的回复&#34;后代如下:

Doc = XDocument.Parse(response);
foreach (var node in xDoc.Root.Descendants("response")) {
  // process node
}

没有找到后代。我在这里错过了什么吗?我的根本确实是一个多线条&#34;元素,它说它有元素,但它看起来并不像它们可以通过名字找到...

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

由于根节点中的此属性,您的response元素实际上位于命名空间中:

xmlns="DAV:"

为该元素及其后代设置默认命名空间。

因此您还需要在该命名空间中搜索元素。幸运的是,LINQ to XML非常简单:

XNamespace ns = "DAV:";
foreach (var node in xDoc.Root.Descendants(ns + "response"))
{
    ...
}