【发布时间】:2015-05-27 17:15:54
【问题描述】:
当我尝试从文本中解析 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);
}
}
默认命名空间仍为空。
【问题讨论】:
标签: c# xml linq-to-xml