我正在用C#編寫一個自定義的WebDAV服務器。我使用的客戶端測試程序之一是NetDrive,它聲稱並且似乎是符合WebDAV的客戶端。我的問題是,我在下面的格式。在接收服務器上的請求:如何在C#中處理webdav服務器XML請求#
<?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);
但我在我的迭代器中沒有爲第一個XML文件獲取節點。看起來默認的命名空間並不像我認爲的那樣工作。
我在做什麼錯?當命名空間可能是默認的,或者可能被顯式命名時,如何查詢此XML是否存在allprop
節點?