【问题标题】:XDocument to XElementXDocument 到 XElement
【发布时间】:2012-11-07 18:25:59
【问题描述】:

如何将 XDocument 转换为 XElement?

我通过搜索找到了以下内容,但它是用于在 XDocument 和 XmlDocument 之间转换,而不是在 XDocument 和 XElement 之间转换。

public static XElement ToXElement(this XmlElement xmlelement)
{
    return XElement.Load(xmlelement.CreateNavigator().ReadSubtree());
}

public static XmlDocument ToXmlDocument(this XDocument xdoc)
{
    var xmldoc = new XmlDocument();
    xmldoc.Load(xdoc.CreateReader());
    return xmldoc;
}

我找不到任何东西可以将 XDocument 转换为 XElement。任何帮助将不胜感激。

【问题讨论】:

  • 为什么要将 XDocument 转换为 XElement?
  • 你只想要根元素吗? xdoc.Root?
  • -1。 “这没有帮助”是对问题的非常有用的解释。 (除非它是自我评估帖子的质量,但它应该是评论:))。还要检查你的键盘 - 它似乎吃掉了“你”的一些字符......
  • 您的代码示例甚至没有执行您所询问的转换。该代码将XmlElement 转换为XElementXDocument 转换为XmlDocument。你实际上在问什么?
  • 正如 Pawel 和 JohnD 所说,只需获取 .Root 元素即可。为了清楚起见,我添加了一个带有显式代码示例的答案。

标签: c# xml linq-to-xml xelement


【解决方案1】:

其他人已经说过了,但这里有一个将 XDocument 转换为 XElement 的示例:

 XDocument doc = XDocument.Load(...);
 return doc.Root;

【讨论】:

  • @Pawel - 是的,但我觉得有必要通过简单的代码示例将其变得非常明确,因为 OP 仍在寻找答案。
  • 不要忘记这作用于同一个参考,即如果您编辑生成的 XElement,更改也会反映在 XDocument 文档上。这可能需要也可能不需要。
【解决方案2】:

XDocument 到 XmlDocument:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xdoc.CreateReader());

XmlDocument 到 XDocument

XDocument xDoc = XDocument.Load(new XmlNodeReader(xmlDoc));

要从 XDocument 中获取根元素,请使用 xDoc.Root

【讨论】:

    【解决方案3】:

    从 XDocument 到 XElement 的简单转换

    XElement cvtXDocumentToXElement(XDocument xDoc)
    {
        XElement xmlOut = XElement.Parse(xDoc.ToString());
        return xmlOut;
    }
    

    【讨论】:

    • 不要忘记这会创建一个全新的 XElement 实例,即对 XElement 所做的更改不会反映在 XDocument 上。这可能需要也可能不需要。
    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2014-08-27
    相关资源
    最近更新 更多