2010-10-20 82 views
0

我喜欢使用linq从xml文件中检索数据。我验证了很多示例,所有示例都以XElement的形式显示检索到的元素,但是以XMLNode的形式检索。是否有可能做这样的事我该如何将XElement转换为xmlnode,我如何做到这一点。我需要它在XMLBound元素不在XMLDocment中。如何使用linq从xmldocment作为xml节点进行检索

回答

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

希望这有助于
迈拉

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​​,那么将整个文档转换为一个文档可能更清晰,而不是复制单个节点,尤其是在数据结构可变的情况下。

但是,如果你只是需要一些快速的互操作性,上述将工作得很好,合理高效。