Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从XPathNodeIterator返回XmlDocument_C# - Fatal编程技术网

C# 从XPathNodeIterator返回XmlDocument

C# 从XPathNodeIterator返回XmlDocument,c#,C#,我需要一些帮助从XPathNodeIterator返回XmlDocument对象 以下是我想做的: public XmlDocument GetFilteredXML(XmlDocument baseXML, int codeID) { XPathNavigator nav = baseXML.CreateNavigator(); string xpath = /*some expression based on codeID*/; XPathExpression exp

我需要一些帮助从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?
}

XPathNodeIterator
不包含节点。名称是一个线索-它是一个迭代器,这意味着它只包含如何在所需节点上迭代的逻辑。节点本身来自其他地方——在本例中,是您提供的原始
baseXML
对象。他们从不离开那个对象,您只是创建了一个导航器,它知道如何导航文档,以及一个迭代器,它知道如何使用某些条件迭代导航器

要执行所描述的操作,需要创建一个新的
XmlDocument
,给它一个新的根元素,并从迭代器中为每个节点调用
ImportNode
,然后调用
Append
。这将创建一个包含根元素中所有选定节点的平面XmlDocument。

这是一个选项:

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方法无法完成的?(计算XPath表达式时会想到SelectNodes和SelectSingleNode)

我使用XPathExpression添加了一些排序条件。OuterXml属性按原样返回整个xml(未过滤)