好吧,这是最终答案。我使用了很好的Jimmy想法(不幸的是,它本身并没有完成),并且使用了完整的递归功能才能正常工作。
基于接口:
string RemoveAllNamespaces(string xmldocument);
我在这里代表最终的干净通用的C#解决方案,用于删除XML名称空间:
//Implemented based on interface, not part of algorithmpublic static string RemoveAllNamespaces(string xmldocument){ XElement xmldocumentWithoutNs = RemoveAllNamespaces(XElement.Parse(xmldocument)); return xmldocumentWithoutNs.ToString();}//Core recursion function private static XElement RemoveAllNamespaces(XElement xmldocument) { if (!xmldocument.HasElements) { XElement xElement = new XElement(xmldocument.Name.LocalName); xElement.Value = xmldocument.Value; foreach (XAttribute attribute in xmldocument.Attributes()) xElement.Add(attribute); return xElement; } return new XElement(xmldocument.Name.LocalName, xmldocument.Elements().Select(el => RemoveAllNamespaces(el))); }
它正在100%正常工作,但是我没有对其进行太多测试,因此它可能无法涵盖某些特殊情况……但这是一个很好的起点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)