Linq to XML 禁用默认命名空间

本文关键字:默认 命名空间 to XML Linq | 更新日期: 2023-09-27 18:36:24

我正在尝试使用 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>

Linq to XML 禁用默认命名空间

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

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