XmlElement.Attributes.Remove* 方法对于任意属性都可以正常工作,导致已删除的属性从 XmlDocument.OuterXml 属性中删除。然而 Xmlns 属性是不同的。这是一个例子:
XmlDocument doc = new XmlDocument();
doc.InnerXml = @"<Element1 attr1=""value1"" xmlns=""http://mynamespace.com/"" attr2=""value2""/>";
doc.DocumentElement.Attributes.RemoveNamedItem("attr2");
Console.WriteLine("xmlns attr before removal={0}", doc.DocumentElement.Attributes["xmlns"]);
doc.DocumentElement.Attributes.RemoveNamedItem("xmlns");
Console.WriteLine("xmlns attr after removal={0}", doc.DocumentElement.Attributes["xmlns"]);
结果输出是
xmlns attr before removal=System.Xml.XmlAttribute
xmlns attr after removal=
<Element1 attr1="value1" xmlns="http://mynamespace.com/" />
该属性似乎已从 Attributes 集合中删除,但并未从 XmlDocument.OuterXml 中删除。
我猜是因为这个属性的特殊含义。
问题是如何使用 .NET XML API 删除 xmlns 属性。
显然,我可以从其字符串表示形式中删除该属性,但我想知道是否可以使用 API 执行相同的操作。
@编辑:我说的是.NET 2.0。
非常感谢 Ali Shah,这个帖子完美地解决了我的问题!
这是一个 C# 转换:
var dom = new XmlDocument();
dom.Load("C:/ExampleFITrade.xml));
var loaded = new XDocument();
if (dom.DocumentElement != null)
if( dom.DocumentElement.NamespaceURI != String.Empty)
{
dom.LoadXml(dom.OuterXml.Replace(dom.DocumentElement.NamespaceURI, ""));
dom.DocumentElement.RemoveAllAttributes();
loaded = XDocument.Parse(dom.OuterXml);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)