2010-10-20 75 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​​,那麼將整個文檔轉換爲一個文檔可能更清晰,而不是複製單個節點,尤其是在數據結構可變的情況下。

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