[XML]从 XPathNavigator 向 XmlDocument 导入节点 | Import Nodes from XPathNavigator to XmlDocument

在对XML文档的操作中,经常会遇到节点的提取和插入。

而利用 XPathNavigator,不仅可以借助于 XPathExpression,并添加 Sort 进行排序。个人感觉是会比XmlDouments里面去SelectNodes会强得多。但是要把 XPathNavigator 对象提取出来,却没有直接的办法。因为 XPathNodeIterator.Current 对象返回的是一个 XPathNavigator, 而不是一个 XMLNode。不过不必把一个个Attributes分离出来写,利用OuterXml,以及新建一个临时XmlDocument,再提取根节点就可轻松实现这个过度,将XPathNodeIterator.Current转化为XmlNode,完成导入。


以下函数,通过xpExp查询xpDocSource所需要的节点,并插入到xDocDest的xNodeDest节点内。

using System.Xml;
using System.Xml.XPath;

public void GetApplication(XPathDocument xpDocSource, XPathExpression xpExp, XmlDocument xDocDest, XmlNode xNodeDest)
{ 
    XPathNavigator xpNav = xpDocSource.CreateNavigator();            

    XmlDocument xd;
    
    XPathNodeIterator xpIter = xpNav.Select(xpExp);
    while (xpIter.MoveNext())
    {
	xd = new XmlDocument();
	xd.LoadXml(xpIter.Current.OuterXml);
	XmlNode xNode = xd.SelectSingleNode(xd.DocumentElement.Name);
	xNodeDest.AppendChild(xDocDest.ImportNode(xNode, true));
    }
}

关于aGuegu

向着更高的逼格
此条目发表在C#, XML分类目录,贴了, , , 标签。将固定链接加入收藏夹。