Я пишу пользовательский сервер WebDAV на C#. Одна из клиентских тестовых программ, которые я использую, - NetDrive, и она утверждает, что она является клиентом, совместимым с WebDAV. Моя проблема в том, я получаю запрос на сервер в следующем формате:Как обрабатывать XML-запрос сервера webdav в C#
<?xml version="1.0" encoding="utf-8"?>
<propfind xmlns="DAV:">
<allprop/>
</propfind>
Но другие клиенты делают это:
<?xml version="1.0" encoding="utf-8"?>
<D:propfind xmlns:D="DAV:">
<D:allprop/>
</D:propfind>
два различных формата пространства имен продолжают fooing мою логику искать элемент «allprop». Мой код выглядит как это:
string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><propfind xmlns=\"DAV:\"><allprop/></propfind>"; //Hardcode to make all the StackOverflow users' lives easier
XPathDocument doc = new XPathDocument(new StringReader(xml));
XPathNavigator nav = doc.CreateNavigator();
XPathNodeIterator it = nav.Select("/propfind/*");
Теперь я знаю, что нужно поставить в некоторый тип менеджера пространства имен для «DAV:», так что я попытался это:
XmlNamespaceManager nsman = new XmlNamespaceManager(nav.NameTable);
nsman.AddNamespace("", "DAV");
XPathNodeIterator it = nav.Select("/propfind/*", nsman);
Но я 'm не получает узлов в моем итераторе для первого файла XML. Похоже, что пространство имен по умолчанию не работает, как я думал.
Что я делаю неправильно? Как я могу запросить этот XML для существования узла allprop
, когда пространство имен может быть по умолчанию или может быть явно указано?