Linq to XML 禁用默认命名空间

Linq to XML Disable default namespace

我正在尝试使用 LINQ to XML 为 WebDAV 服务器编写查询,但我遇到了一个问题,即 LINQ 正在设置一个默认命名空间 (xmlns = "bla"),但它没有WebDAV 似乎支持。

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>

问题是您的元素不在 DAV: 命名空间中 - 它在 d 命名空间中。您需要区分名称空间 URI 和名称空间别名。你想要:

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