从XPathNodeIterator返回XmlDocument

时间:2010-07-15 17:08:05

标签: c#

从XPathNodeIterator返回XmlDocument对象需要一些帮助。

这是我想要做的事情:

public XmlDocument GetFilteredXML(XmlDocument baseXML, int codeID)
{
    XPathNavigator nav = baseXML.CreateNavigator();
    string xpath = /*some expression based on codeID*/;
    XPathExpression exp = nav.Compile(xpath);
    exp.AddSort(/*do some sorting*/);
    XPathNodeIterator iter = exp.Select(exp);

    // Here how do I return an XmlDocument object from
    // the iterator which contains the selected nodes only?
}

2 个答案:

答案 0 :(得分:2)

XPathNodeIterator完全没有包含节点。名称是一个线索 - 它是一个迭代器,这意味着它只包含如何迭代所需节点的逻辑。节点本身来自其他地方 - 在这种情况下,是您提供的原始baseXML对象。他们永远不会离开那个对象,你刚刚创建了一个知道如何导航文档的导航器,以及一个知道如何使用某些标准迭代导航器的迭代器。

要执行您要描述的内容,您需要创建一个新的XmlDocument,为其提供一个新的根元素,并为迭代器中的每个节点调用ImportNode然后{{1} }。这将创建一个平面的XmlDocument,其中包含根元素中的所有选定节点。

答案 1 :(得分:0)

这是一个选项:

if (iter.MoveNext())  // Position on first node selected,
{                     // assuming that it is the container for the desired result.
    XmlDocument output = new XmlDocument();
    output.LoadXml(iter.Current.OuterXml);
    return output;
}

但是,我认为你不需要首先将它变成XPathNavigator。您正在做什么操作,使用XmlDocument方法无法实现?(SelectNodes和SelectSingleNode考虑用于评估XPath表达式)