Linq to Xml : 删除命名空间
Linq to Xml : Remove namespace
我正在从我的 xml 文档中检索元素或节点。一切顺利,但是当我检索节点时,它被分配了我根的命名空间。这个我不要我只想要之前的节点(没有命名空间)。
我检索的元素是例如x元素。
我试过了
xElement.Attributes("xmlns").Remove();
xElement.Attributes("xmlns").Where(x=>x.IsNamespaceDeclaration).Remove();
None 人成功了。
我什至试过这个例子:https://social.msdn.microsoft.com/Forums/en-US/9e6f77ad-9a7b-46c5-97ed-6ce9b5954e79/how-do-i-remove-a-namespace-from-an-xelement?forum=xmlandnetfx这左边遇到了一个带有空命名空间的元素xmlns=""
请帮忙
如前所述here
Based on interface:
string RemoveAllNamespaces(string xmlDocument);
I represent here final clean and universal C# solution for removing
XML namespaces:
//Implemented based on interface, not part of algorithm
public 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)));
}
以上方案还有两个flase
- 它忽略属性
- 不适用于 "mixed mode" 个元素
这是另一个解决方案:
public static XElement RemoveAllNamespaces(XElement e)
{
return new XElement(e.Name.LocalName,
(from n in e.Nodes()
select ((n is XElement) ? RemoveAllNamespaces(n as XElement) : n)),
(e.HasAttributes) ?
(from a in e.Attributes()
where (!a.IsNamespaceDeclaration)
select new XAttribute(a.Name.LocalName, a.Value)) : null);
}
示例代码 here。
我正在从我的 xml 文档中检索元素或节点。一切顺利,但是当我检索节点时,它被分配了我根的命名空间。这个我不要我只想要之前的节点(没有命名空间)。
我检索的元素是例如x元素。 我试过了
xElement.Attributes("xmlns").Remove();
xElement.Attributes("xmlns").Where(x=>x.IsNamespaceDeclaration).Remove();
None 人成功了。
我什至试过这个例子:https://social.msdn.microsoft.com/Forums/en-US/9e6f77ad-9a7b-46c5-97ed-6ce9b5954e79/how-do-i-remove-a-namespace-from-an-xelement?forum=xmlandnetfx这左边遇到了一个带有空命名空间的元素xmlns=""
请帮忙
如前所述here
Based on interface:
string RemoveAllNamespaces(string xmlDocument);
I represent here final clean and universal C# solution for removing XML namespaces:
//Implemented based on interface, not part of algorithm public 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))); }
以上方案还有两个flase
- 它忽略属性
- 不适用于 "mixed mode" 个元素
这是另一个解决方案:
public static XElement RemoveAllNamespaces(XElement e)
{
return new XElement(e.Name.LocalName,
(from n in e.Nodes()
select ((n is XElement) ? RemoveAllNamespaces(n as XElement) : n)),
(e.HasAttributes) ?
(from a in e.Attributes()
where (!a.IsNamespaceDeclaration)
select new XAttribute(a.Name.LocalName, a.Value)) : null);
}
示例代码 here。