2010-07-15 4 views
1

J'ai besoin d'aide pour retourner un objet XmlDocument de XPathNodeIterator.Renvoyer un XmlDocument à partir de XPathNodeIterator

Voici ce que je voulais faire:

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? 
} 

Répondre

2

Le XPathNodeIterator n'a pas contiennent les noeuds, exactement. Le nom est un indice - c'est un itérateur, ce qui signifie qu'il ne contient que la logique pour parcourir les nœuds que vous voulez. Les nœuds eux-mêmes proviennent d'ailleurs - dans ce cas, l'objet original baseXML fourni. Ils ne quittent jamais cet objet, vous venez de créer un navigateur qui sait comment naviguer dans le document, et un itérateur, qui sait comment itérer le navigateur en utilisant certains critères.

Pour faire ce que vous décrivez, vous devez créer une nouvelle XmlDocument, lui donner un nouvel élément racine, et pour chaque nœud du iterator, appelez ImportNode puis Append. Cela créera un XmlDocument plat avec tous les nœuds sélectionnés dans l'élément racine.

0

C'est une option:

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; 
} 

Cependant, je ne pense pas que vous devez en faire un XPathNavigator en premier lieu. Quelle opération faites-vous, qui ne peut pas être accomplie en utilisant les méthodes XmlDocument? (Les ressorts SelectNode et SelectSingleNode à l'esprit pour évaluer une expression XPath)

+0

J'ai utilisé XPathExpression pour ajouter quelques critères de tri. – Daniel

+0

La propriété OuterXml renvoie l'intégralité du fichier XML tel quel (non filtré) – Daniel

Questions connexes