我想使用linq从xml文件中检索数据。我验证了很多例子,所有例子都以XElement的形式显示检索到的元素,但是以XMLNode的形式检索。是否有可能像其他人那样将XElement转换为xmlnode,我该怎么做呢。我需要XMLBound元素而不是XMLDocment。
答案 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,那么将整个文档转换为一个而不是来回复制单个节点可能更简洁,特别是如果你的数据结构是可变的。
但是,如果你只是需要一些快速互操作,上面的工作将会很好并且合理有效。