如何使用linq从xmldocment检索为xml节点

时间:2010-10-20 11:59:52

标签: c# xml linq

我想使用linq从xml文件中检索数据。我验证了很多例子,所有例子都以XElement的形式显示检索到的元素,但是以XMLNode的形式检索。是否有可能像其他人那样将XElement转换为xmlnode,我该怎么做呢。我需要XMLBound元素而不是XMLDocment。

2 个答案:

答案 0 :(得分:1)

您可以为linq编写扩展名。

public static XmlNode GetXmlNode(this XElement element)
{
    using (XmlReader xmlReader = element.CreateReader())
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlReader);
        return xmlDoc;
    }
}

由于你有XElement,你可以转换它。(blog post

element.GetXmlNode();

希望这有助于我的Myra

答案 1 :(得分:0)

以下方法会将XNode转换为XmlNode

XmlDocument doc = new XmlDocument(); //cached as a member variable for performance.
//recreating it inside ToXmlNode works fine too.

XmlNode ToXmlNode(XNode xnode) {
    using(var reader = myElem.CreateReader())
        return doc.ReadNode(reader);
}

这意味着它将支持整个文档,单个元素,文本节点,注释,处理指令 - 除XAttribute以外的大部分内容。

然而,这是你应该避免的。尝试坚持使用新的System.Xml.Linq API,而不是将其与基于XmlDocument的API混合使用。这个新的API更容易使用,无论如何,像这样混合API会使代码难以维护。如果你必须混合API,那么将整个文档转换为一个而不是来回复制单个节点可能更简洁,特别是如果你的数据结构是可变的。

但是,如果你只是需要一些快速互操作,上面的工作将会很好并且合理有效。