【问题标题】:Convert XmlElement to XElement with Elements("ElementName") Returns No Results使用 Elements("ElementName") 将 XmlElement 转换为 XElement 不返回任何结果
【发布时间】:2012-04-13 08:16:13
【问题描述】:

我正在使用以下代码将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() 得到了结果。

为什么调用Elements没有出来元素,这两种方法有什么区别?

这是我正在解析的 xml 的片段。

<Feature xmlns="http://schemas.microsoft.com/sharepoint/">
    <ElementManifests>
        <ElementFile Location="Path/file.xml"/>
    </ElementManifests>
</Feature>

【问题讨论】:

  • 你确定你的“ElementName”没有错字吗?
  • 如果“ElementName”是正确的,你的元素有命名空间吗?如果是这样,我认为它应该在您调用 Elements(
  • 如果 XML 节点(作为文本)添加示例。
  • 给我们一个node.OuterXml包含的xml的例子。

标签: c# xml xelement


【解决方案1】:

您可能没有正确使用命名空间。这两种方法都适合我:

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 教程开始。

【讨论】:

  • 我熟悉 System.Xml.Linq,我没有使用 Load 我正在使用 Parse,我认为这可能会有所不同。命名空间也不是问题,因为Elements() 仍应返回结果。
  • 是的 - Elements() 应该产生结果(并且使用您的示例 xml 对我有用)。 LoadParse 的结果实际上没有任何区别——一个是从文件加载 XML,一个是解析 XML 字符串。您能否验证您是否将完整的 XML 传递给 ToXElement 方法?
  • 这一定意味着我的问题实际上出在其他地方,谢谢您的帮助。
【解决方案2】:

测试这段代码:

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);
}

【讨论】:

    猜你喜欢
    • 2013-05-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 2016-10-12
    • 2017-06-10
    • 2017-12-28
    相关资源
    最近更新 更多