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