gpt4 book ai didi

c# - 为 XDocument 指定默认命名空间给出空值

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:01 24 4
gpt4 key购买 nike

当我尝试从文本中解析 XDocument 时,我可以获得这样的默认命名空间:

var xmlDocument1 = XDocument.Parse("<root xmlns='http://somenamespace'></root>");
var xmlNamespace1 = xmlDocument1.Root.GetDefaultNamespace().NamespaceName; // somenamespace

但是,如果我尝试手动创建 XDocument,则会得到一个空值:

var xmlRoot2 = new XElement(XName.Get("root", "http://somenamespace"));
var xmlDocument2 = new XDocument(xmlRoot2);
var xmlNamespace2 = xmlDocument2.Root.GetDefaultNamespace().NamespaceName; // is empty

我希望 xmlNamespace2 为“http://somenamespace”。我做错了什么吗?

编辑: 建议重复中的答案不能解决我的问题,即使我使用此处建议的功能也是如此: How to set the default XML namespace for an XDocument我仍然会得到空的命名空间。这是链接问题的解决方案:

class Program
{
static void Main(string[] args)
{
var xmlRoot = new XElement(XName.Get("root"));
var xmlDocument = new XDocument(xmlRoot);
SetDefaultXmlNamespace(xmlRoot, "http://somenamespace");
var xmlNamespace = xmlDocument.Root.GetDefaultNamespace().NamespaceName; // is empty
}

public static void SetDefaultXmlNamespace(XElement xelem, XNamespace xmlns)
{
if (xelem.Name.NamespaceName == string.Empty)
xelem.Name = xmlns + xelem.Name.LocalName;
foreach (var e in xelem.Elements())
SetDefaultXmlNamespace(e, xmlns);
}
}

默认命名空间仍然是空的。

最佳答案

我想我明白为什么我没有获得默认命名空间。根据MSDN :

When creating XML trees using C#, even if an XML tree would be serialized with a default namespace, if the namespace is not persisted in the XML tree as an attribute, this method will not report the namespace as the default namespace.

所以我可能需要显式设置 xmlns 属性:

class Program
{
static void Main(string[] args)
{
var xmlRoot = new XElement(XName.Get("root", "http://somenamespace"));
xmlRoot.SetAttributeValue("xmlns", "http://somenamespace");
var xmlDocument = new XDocument(xmlRoot);
var xmlNamespace = xmlDocument.Root.GetDefaultNamespace().NamespaceName;
}
}

现在我得到了正确的命名空间名称。

关于c# - 为 XDocument 指定默认命名空间给出空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30489117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com