2015-01-06 3 views
0

Я пытаюсь использовать LINQ to XML для записи запросов для сервера WebDAV, но у меня возникла проблема, когда LINQ устанавливает пространство имен по умолчанию (xmlns = "bla"), которое, похоже, не поддерживается от WebDAV.Linq to XML Отключить пространство имен по умолчанию

XNamespace ns = "d"; 
var content = new XElement(ns + "propfind" 
,new XAttribute(XNamespace.Xmlns + "d", "DAV:") 
,new XElement(ns + "allprops")); 

Ожидаемый результат:

<d:propfind xmlns:d="DAV:"><d:allprop /></d:propfind> 

Но независимо от того, как я пытаюсь сериализации (даже с XElement.Save(someStream, SaveOptions.DisableFormatting)) Я всегда получаю это, не поддерживается сервером WebDav Я пытаюсь ударить ,

<propfind xmlns:d="DAV:" xmlns="d"><allprop /></propfind> 

ответ

3

Проблема заключается в том, что ваш элемент не в DAV: имен - это в d пространстве имен. Вы должны различать URI пространства имен и псевдоним пространства имен. Вы хотите:

XNamespace ns = "DAV:"; 
var content = new XElement(ns + "propfind", 
    new XAttribute(XNamespace.Xmlns + "d", ns), 
    new XElement(ns + "allprops")); 
+0

Ahh ok спасибо. Поэтому, если я правильно понимаю, я все еще использую пространство имен DAV во всех моих определениях, и сериализация будет понимать, что он должен использовать псевдоним, который я предоставляю как 'd' – NtscCobalt

+0

@NtscCobalt: Да - хотя он также будет по умолчанию для элемента и потомков, поэтому, если вы не захотите * псевдоним, просто полностью удалите атрибут ... –

+0

Хорошо имеет смысл. Да, в этом случае мне нужен псевдоним. IIS дает мне 400, если DAV устанавливается как пространство имен по умолчанию для корневого элемента. – NtscCobalt

Смежные вопросы