将 XmlElement 转换为带有元素的 XElement(“ElementName”)不返回任何结果
本文关键字:ElementName 结果 任何 返回 XElement 转换 XmlElement 元素 | 更新日期: 2023-09-27 18:30:54
我使用以下代码将XmlElement
转换为XElement
public staic XElement ToXElement(this XmlNode node) {
XElement element = null;
if (null != node) {
element = XElement.Parse(node.OuterXml);
}
return element;
}
但是,当我打电话给Elements()
或Elements("ElementName")
时,我没有得到任何结果。
但是,我确实通过呼叫Nodes()
得到结果。
为什么元素不是从调用元素中产生的,这两种方法之间有什么区别?
这是我正在解析的 xml 的截图。
<Feature xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementFile Location="Path/file.xml"/>
</ElementManifests>
</Feature>
您可能没有正确使用命名空间。这两种方法对我来说都正确:
XElement root = XElement.Load("test.xml"); //or result of ToXElement
foreach(var item in root.Elements())
{
Console.WriteLine(item.Name);
}
XNamespace ns = "http://schemas.microsoft.com/sharepoint/";
var manifestsNode = root.Element(ns + "ElementManifests");
鉴于您不知道Elements()
(获取所有直接子元素)和Element()
(获取一个特定的直接子元素)之间的区别,您应该从 Linq to Xml 教程开始。
测试此代码:
var Status = xn["Feature"];
foreach (XmlElement element in Status) {
XElement withoutXmlnsElement =RemoveAllNamespaces(XElement.Parse(element.OuterXml));
}
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);
}